3

我遇到了显示ArrayList2750 行的问题。显示行的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并以 50 个块发送到 JSP 并在 JSP 中显示或显示它们,以便在渲染时不会很慢。

4

4 回答 4

2

不建议在List中存储 2750 条记录。当您从 DB/storage 读取它以及在您的 web/app 服务器上传递它时,请考虑它的含义。此外,您可能不需要一口气全部使用它们。

请考虑一次以 100 个块的形式获取和显示数据。您始终可以通过传递索引来对服务器进行新调用以获取下一组记录。

如果您仍然不使用,您将不得不使用 Ajax;这样,您可以继续将剩余数据附加到页面而无需刷新。

于 2013-02-07T09:53:43.030 回答
0

我建议使用分页机制,以便您在给定时间加载 50 或 100 条记录。看看这个极限表

于 2013-02-07T09:50:06.223 回答
0

Struts<logic:iterate>标记具有offsetlength用于显示集合部分的属性。下面将显示ArrayList.

<logic:iterate name="customerlist" id="customer" indexId="customerNum" offset="0" length="50">
    <tr id="${customer.customerId}">
        <td>${customer.fullName}</td>
        ...
    </tr>
</logic:iterate>
于 2013-02-07T09:50:21.763 回答
0

您不应该打破列表customerlist 以“分块发送到 jsp”。相反,您可以中断将返回给定数量记录的方法,即customerManager.getCustomerForBeneficiaryWithCount(perPage);或使用 JSP 逻辑标记来限制使用两个参数firstRowperPage.

于 2013-02-07T10:17:56.813 回答