Извлекать данные с помощью Ajax в Datatable после рендеринга страницы

Это простая идея для решения, однако я никогда не делал этого раньше и нуждаюсь в совете. Я использую Spring, Spring Webflow и JSF с Primefaces.

Я использую внешние веб-сервисы для получения некоторых данных в таблице. Иногда он работает медленнее, чем вызов веб-сайта, и я хочу избежать «ожидания» загрузки. Моя идея (в этом нет ничего нового) состоит в том, чтобы загрузить страницу со всем статическим (или локальным сервером) содержимым, а затем вызвать внешний веб-сервис для получения данных. Чем показать его, когда он будет закончен.

Пока это выглядит так:

интернет сайт:

<p:dataTable id="table" var="item" value="#{lastfm.topArtists}">
                    <p:column headerText="Model" sortBy="#{item.name}">
                        <h:outputText value="#{item.name}" />
                    </p:column>
</p:dataTable>

и сам Бин просто:

private List<Artist> topArtists = new ArrayList<Artist>();
public void init(String u) {
    topArtists = (List<Artist>) User.getTopArtists(u, StaticContent.api_key);
}

Пользователь - это API веб-сервиса.

Инициализация ATM загружает on-render веб-сайта, но я хочу избежать этого, вызывать его каким-то образом после загрузки страницы и отображать в случае успеха.

Я предполагаю, что это может быть какая-то функция javascript с jquery, использующая onDocumentReady() и onSuccess для ajax, но я действительно понятия не имею, как ее подключить.

Спасибо!


person Atais    schedule 03.01.2013    source источник


Ответы (1)


Компонент опроса простых лиц может помочь вам в этом.

http://www.primefaces.org/showcase-labs/ui/poll.jsf

<h:form id="form">  
<p:poll interval="3"   
        listener="#{lastfm.topArtistsRetrieved}" update="table" />  

<p:dataTable id="table" var="item" value="#{lastfm.topArtists}">
                <p:column headerText="Model" sortBy="#{item.name}">
                    <h:outputText value="#{item.name}" />
                </p:column>
</p:dataTable>
</h:form>

Я предполагаю, что User.getTopArists сообщит вам о завершении. В основном вам нужен флаг, который указывает, завершен ли ваш процесс или нет. И через опрос основных лиц вы должны проверить, поднят ли флаг или нет, а через обновление ajax вы должны распечатать результаты, когда они будут готовы. Вы можете даже показать ход процесса через этот поток.

person cubbuk    schedule 03.01.2013