首页 > 解决方案 > 在 JSF 中并行加载数据

问题描述

我有一个显示表格内容的 JSF/Primefaces 页面。在此表中有一个计时器的结果,该计时器每 15 分钟测试一些相关服务的可访问性。我在表格下方还有一个刷新按钮,可以直接开始测试。某些服务的测试可能需要很长时间,并且页面在测试时不会冻结。

我想知道,是否有可能以所有并行方式异步启动这些测试,并且页面显示服务测试是否仍在运行,或者是否有结果。

我知道这对于一张桌子来说可能很困难,但如果你认为它太复杂了,那么如果有可能表明测试功能仍在运行,那就太好了。

简化代码:

<h:form id="statusfrm">
  <div class="card">
    <p:dataTable var="sys" value="#{statushandler.availableList}"
      showGridlines="true" size="small">
        <p:column headerText="System">
          <h:outputText value="#{sys.systemName}" />
        </p:column>
        <p:column headerText="Verfügbarkeit">
          <h:outputText value="#{sys.availability}" />
        </p:column>
        <p:column headerText="Letzte Prüfung">
          <h:outputText value="#{sys.lastUpdate}" rendered="#{not sys.requestPending}"/>
          <h:outputText value="Pending..." rendered="#{sys.requestPending}"/>
        </p:column>
      </p:dataTable>
    </div>
    <p:commandButton value="Neu laden" icon="pi  pi-refresh" 
      actionListener="#{statushandler.refreshParameter}"/>
</h:form>

在状态处理程序中

    public String refreshParameter() {
        Async: Interface1.checkSystem();
        Async: Interface2.checkSystem();
        Async: Interface3.checkSystem();
        Async: Interface4.checkSystem();
        return null;
    }

目标是每次用户返回到带有表的页面时,系统都知道某些系统有待处理的请求。

但我也会尝试这个解决方案@Inject @Push看起来也很有用。

标签: javajsfjava-ee-6

解决方案


推荐阅读