以下是代码段:
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>
请建议。谢谢。
答案 0 :(得分:0)
这个想法是在页面加载后开始长时间运行列表初始化。
您可以尝试以下内容:
不要在bean构造函数/ post构造方法中初始化列表。而不是它,添加到bean公共方法,您将在页面加载后调用。
public void loadTransactionEntryList();
public void loadloggingList();
public void loadSalesEntryList();
在表附近添加加载指示符,并使用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>
在文档末尾使用JavaScript调用命令,或使用jquery(文档).ready()调用命令。
<script type="text/javascript">
loadTransactionEntryListCommand();
loadloggingListCommand();
loadSalesEntryListCommand();
</script>
最后,实现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()方法。