我遇到了显示带有2750行的ArrayList
的问题。显示行的struts代码是:
<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
并以五十个块的形式发送到JSP并显示OR在JSP中显示它们以便在渲染时它不会很慢。
答案 0 :(得分:2)
在列表中存储2750条记录不是建议的方式。当您从数据库/存储中读取它时以及在Web /应用服务器上传递它时,请考虑它的含义。此外,您可能不需要一次性完成所有这些操作。
请考虑一次以100个块的形式提取和显示数据。您始终可以通过传递索引来对服务器进行新的调用以获取下一组记录。
如果你不使用Ajax,你也必须使用Ajax;这样,您可以继续将剩余数据附加到页面而不进行刷新。
答案 1 :(得分:0)
我建议使用分页机制,以便在给定时间加载50或100条记录。看看这个extremetable
答案 2 :(得分:0)
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>
答案 3 :(得分:0)
您不应该将列表customerlist
分解为“以块的形式发送到jsp”。相反,您可以破坏将返回给定数量的记录的方法,即customerManager.getCustomerForBeneficiaryWithCount(perPage);
或使用JSP逻辑标记来限制使用两个参数firstRow
和perPage
呈现行。