这里只是一个普遍的问题。 我有一个简单的Web应用程序,允许用户过滤数据库中的许多记录。现在这不是一个特别大的清单(目前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>
答案 0 :(得分:0)
当列表包含更多记录时,我也遇到了类似的缓慢。原因是因为迭代器导致在最终的jsp类中记录“out.write”语句。
在你的情况下,每次迭代都接近10 out.write for,这与&amp;在双方。
提高性能的一种方法是使用StringBuilder在服务器端构建表内容,并使用tag(替换迭代器)编写最终字符串。