我遇到了显示 2750 行的
ArrayList
的问题。斯特拉
显示行的 uts 代码是:
<c:forEach items="${customerlist}" var="beneficiaryListval"varStatus="ForIndex" >
<tr id="<c:out value="${beneficiaryListval.customerId}" />">
<td><c:out value="${beneficiaryListval.fullName}" /></td>
<td><c:out value="${beneficiaryListval.mobileNo}" /></td>
<td><c:out value="${beneficiaryListval.passportNo}" /></td>
<td><c:out value="${beneficiaryListval.beneficiaryCount}" /></td>
</tr>
<%rowID++;%>
</c:forEach>
其操作方法是:
public ActionForward load(ActionMapping actionMapping,ActionForm actionForm,HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
try {
mtmrsLogger.entering("BeneficiaryAction", "load");
BeneficiaryForm beneficiaryForm = (BeneficiaryForm) actionForm;
ArrayList customerlist = customerManager.getCustomerForBeneficiaryWithCount();
httpServletRequest.setAttribute("customerlist", customerlist);
beneficiaryForm.setPageStatus("CustomerGrid");
return actionMapping.findForward(Constants.getInstance().SUCCESS);
}
现在,我需要打破
ArrayList customerlist
并将它们以 50 个块的形式发送到 JSP 并显示,或者在 JSP 中显示它们,这样渲染时不会很慢。
不建议在List中存储 2750 条记录。当您从数据库/存储读取它以及在 Web/应用服务器上传递它时,请考虑它的含义。此外,您可能不需要一次性使用所有这些。
请考虑一次以 100 个等块的形式获取和显示数据。您始终可以通过传递索引对服务器进行新的调用以获取下一组记录。
如果您不使用 still,则必须使用 Ajax;这样您就可以继续将剩余数据附加到页面而无需刷新。
我建议使用分页机制,以便您在给定时间加载 50 或 100 条记录。看看这个extremetable
Struts <logic:iterate>
offset
和
length
属性,可用于显示集合的各个部分。下面将显示
ArrayList
中的前 50 个元素。
<logic:iterate name="customerlist" id="customer" indexId="customerNum" offset="0" length="50">
<tr id="${customer.customerId}">
<td>${customer.fullName}</td>
...
</tr>
</logic:iterate>
customerlist
来“分块发送到jsp”。相反,您可以破坏将返回给定数量记录的方法,即
customerManager.getCustomerForBeneficiaryWithCount(perPage);
或使用 JSP 逻辑标记使用两个参数
firstRow
和
perPage
来限制渲染行。