Java Struts标记迭代器在大列表上挣扎



这里只是一个一般性的问题。我有一个简单的web应用程序,允许用户(s)通过数据库中的一些记录过滤。这不是一个特别大的列表(目前是1200 - 1500)

但是我似乎遇到了一些零星的问题,没有错误,我想知道是否有人看到类似的事情。

基本上,我返回的列表返回预期的结果数量(例如1,267),但是有时不是所有的结果都被显示。有时你运行搜索,你得到所有1267,另一次页面似乎只是"停滞"在74或123或其他。再次点击search,可能会发生同样的情况,再次点击它,这次它成功了(返回所有1267个)。然后它会工作在接下来的2或3次,然后它会回到只显示73个结果。

现在从Java的角度来看,List是正确的,所以这必须是Struts标记(特别是<s:iterator>)的问题。

我只是想知道是否有人经历过这种情况,以及如何绕过它。

同样值得注意的是,结果似乎加载得非常慢,几乎就像10个块,然后是2秒的延迟,然后是另一个10,所以你可以想象1,267将花费大约一分钟!这似乎非常错误。

如您所见,迭代器中没有什么特别的东西:
 <s:iterator value="resultList" var="obj" status="row">
    <tr>
        <td>[<s:property value="%{#row.count}"/>]</td>
        <td noWrap="true"align="center"><input type="checkbox" name="allocateChkBox" value="<s:property value="#obj.id"/>" /></td>      
        <td noWrap="true"><s:property value="#obj.reference"/></td>
        <td noWrap="true"><s:property value="#obj.status"/></td>
        <td noWrap="true"><s:property value="#obj.resource"/></td>
        <td noWrap="true"><s:property value="#obj.society"/></td>
        <td noWrap="true" align="center"><s:property value="#obj.date"/></td>
        <td noWrap="true" align="center"><s:textfield size="11" name="quantity" value="%{#obj.quantity}"/></td>                 
        <td noWrap="true"><s:property value="#obj.embellisher"/></td>
        <td noWrap="true" align="center"><s:textfield  maxLength="5" size="2" name="boxNumber" value="%{#obj.boxNumber}" /></td>
        <td noWrap="true" align="center"><s:textfield size="11" name="trackingNumber" value="%{#obj.trackingNumber}"/></td>
    </tr>
</s:iterator>

当列表包含更多记录时,我也面临类似的缓慢。原因是迭代器会导致log "out "。在最终的JSP类中编写语句。

在您的例子中,每次迭代都接近10次。Write for和&在两边。

大幅度提高性能的一种方法是使用StringBuilder在服务器端形成表内容,并使用标记(代替迭代器)编写最终字符串。

最新更新