具有不同形式数据的dataTable函数

时间:2014-06-20 11:27:18

标签: jsf primefaces datatable

以下是代码段:

tansaction.xhtml

<h:form id="form1">
    <p:dataTable value="#{transactionMB.transactionEntryList}" var="transInfo" rowStyleClass="tdDownValue">

</p:dataTable>
</h:form>

<h:form id="form2">
    <p:dataTable value="#{transactionMB.loggingList}" var="logInfo" rowStyleClass="tdDownValue">

</p:dataTable>
</h:form>

<h:form id="form3">
    <p:dataTable value="#{transactionMB.salesEntryList}" var="salesInfo" rowStyleClass="tdDownValue">

</p:dataTable>
</h:form>

请建议。谢谢。

2 个答案:

答案 0 :(得分:0)

这个想法是在页面加载后开始长时间运行列表初始化。

您可以尝试以下内容:

  1. 不要在bean构造函数/ post构造方法中初始化列表。而不是它,添加到bean公共方法,您将在页面加载后调用。

    public void loadTransactionEntryList();
    public void loadloggingList();
    public void loadSalesEntryList();
    
  2. 在表附近添加加载指示符,并使用remoteCommands调用load *方法。请注意,默认情况下会显示加载指示符并隐藏表格。 oncomplete call用于在命令完成后切换指示符和表。

    <h:form id="commands-form">
        <p:remoteCommand name="loadTransactionEntryListCommand" action="#{transactionMB.loadTransactionEntryList}" 
                    update=":form1" oncomplete="hideLoadingDisplayTable('#form1');"/>
    
        <p:remoteCommand name="loadloggingListCommand" action="#{transactionMB.loadloggingList}" 
                    update=":form2" oncomplete="hideLoadingDisplayTable('#form2');"/>
    
        <p:remoteCommand name="loadSalesEntryListCommand" action="#{transactionMB.loadSalesEntryList}" 
                    update=":form3" oncomplete="hideLoadingDisplayTable('#form3');"/>
    </h:form>
    
    <h:form id="form1">
        <div class="loading-indicator" style="display: block;">...</div>
        <p:dataTable value="#{transactionMB.transactionEntryList}" var="transInfo" rowStyleClass="tdDownValue" style="display: none;">
    
    </p:dataTable>
    </h:form>
    
    <h:form id="form2">
        <div class="loading-indicator" style="display: block;">...</div>
        <p:dataTable value="#{transactionMB.loggingList}" var="logInfo" rowStyleClass="tdDownValue" style="display: none;">
    
    </p:dataTable>
    </h:form>
    
    <h:form id="form3">
        <div class="loading-indicator" style="display: block;">...</div>
        <p:dataTable value="#{transactionMB.salesEntryList}" var="salesInfo" rowStyleClass="tdDownValue" style="display: none;">
    
    </p:dataTable>
    </h:form>
    
  3. 在文档末尾使用JavaScript调用命令,或使用jquery(文档).ready()调用命令。

    <script type="text/javascript">
        loadTransactionEntryListCommand();
        loadloggingListCommand();
        loadSalesEntryListCommand();
    </script>
    
  4. 最后,实现hideLoadingDisplayTable(formId)函数来隐藏加载指标并使用JavaScript显示表格。

答案 1 :(得分:0)

为什么不在数据表中使用延迟加载分页。加载XHTML页面时,只会加载第一页数据,这肯定会减少您的加载时间。

扩展LazyDataModel并实施load(...)方法,以便在表格中延迟加载数据。

启动数据库连接,并在您的支持bean的方法中创建自定义的lazyDataModel对象,该方法使用@postConstruct进行批注。在lazyDatalModel中维护当前页面和页面大小。在load(...)方法中从数据库获取下一页并返回。

这些链接可以帮助您。

Primefaces数据表分页和延迟加载,请参阅primefaces展示 - http://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml

JDBC分页 - http://java.avdiel.com/Tutorials/JDBCPaging.html

如果您使用的是Persistance(JPA或Hibernate),请参阅Query对象的setFirstResult()和setMaxResult()方法。