1

这里只是一个一般性问题。我有一个简单的网络应用程序,它允许用户过滤数据库中的许多记录。现在这不是一个特别大的列表(目前为 1,200 - 1,500)

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

基本上,我返回的列表返回了预期的结果数量(例如 1,267),但有时并非所有结果都显示出来。有时您运行搜索并获得全部 1,267,有时页面似乎只是“停滞”在 74 或 123 之类的位置。再次点击搜索,可能会发生同样的情况,再次点击它,这次它可以工作(全部 1,267 个返回)。然后它会在接下来的 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>
4

1 回答 1

0

当列表包含更多记录时,我也面临类似的缓慢。原因是迭代器会导致最终 jsp 类中出现“out.write”语句的日志。

在您的情况下,每次迭代都有接近 10 个 out.write for ,并且在两侧都与 & 连接。

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

于 2013-02-12T09:02:58.533 回答