ЦЕЛЬ
Я показываю таблицу, в которой строки - это физические компьютеры в локальной сети, а столбцы - это некоторые фрагменты информации с каждого отдельного компьютера. Часть этой информации хранится локально на сервере, но часть извлекается с самих компьютеров через запросы REST. Я хотел бы сделать вызовы асинхронными из соображений производительности; я имею в виду сначала отобразить таблицу с некоторыми заполнителями, затем отправить все запросы, а затем постепенно заполнять ее данными по мере получения ответов на отдельные запросы.
ПРОБЛЕМА
Проблема заключается в том, что ни одно из найденных мной решений не сработало. p: outputPanel со свойством deferred остается в состоянии заполнителя, показывая этот вращающийся виджет навсегда. remoteCommand не срабатывает, что бы я ни делал. Я пробовал все их варианты, и ни один из них не дал желаемого поведения.
ДРУГИЕ НАБЛЮДЕНИЯ
p: outputPanel успешно используется в другом месте в приложении, кроме как для вся таблица, и там она отлично работает. Однако использование его на всей таблице не поможет, мне все равно придется ждать ответов от каждого отдельного компьютера. Я также мог бы изменить API, чтобы получить всю информацию в одном запросе, но производительность все равно пострадает, если мы добавим больше компьютеров. Проблема здесь не в загрузке запросов, а в последовательном ожидании времени ожидания запросов к неотвечающим компьютерам.
Таблица:
<p:dataTable value="#{stationController.items}" var="item" sortMode="multiple" lazy="true"
paginator="true" rows="50">
<!--TestBundle Project Name-->
<p:column sortBy="#{item.status}" filterBy="#{item.status}">
<f:facet name="header">
<h:outputText value="#{bundle.clientListTitle_testBundleProject}" />
</f:facet>
<p:outputPanel deferred="true">
<h:outputText value="#{testStationsClient.getProjectName(item.ipAddress)}" />
</p:outputPanel>
</p:column>
<!-- bunch of more of these... -->
</p:dataTable>