2013-01-08 49 views
1

這裏只是一個普遍的問題。 我有一個簡單的網絡應用程序,它允許用戶通過數據庫中的許多記錄進行過濾。現在這不是一個特別大的列表(目前1,200 - 1,500)Java Struts標記迭代器在大列表中掙扎

但我似乎有一些零星的問題沒有錯誤,並想知道如果任何人似乎有類似的東西。

基本上我返回的列表正在返回預期的結果數量(示例1,267),但有時並非所有結果都顯示出來。有時你運行搜索,你得到所有1,267,另一次頁面似乎只是停止在說或74或什麼的東西。再次點擊搜索,可能會發生同樣的情況,再次點擊並且這次有效(全部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> 
+1

它取決於搜索按鈕的工作方式,所以更好的帖子[SSCCE](http://sscce.org) –

+0

您是否告訴我們您實際上在網頁中顯示1500行?這顯然是一個反模式......你不能使用分頁? –

回答

0

我也面臨着類似的緩慢時,列表中包含更多的記錄。原因是因爲迭代器導致最終jsp類中的「out.write」語句的日誌。

在你的情況下,每次迭代接近10 out.write for,並且在兩側與&連接。

急劇提高性能的一種方法是使用StringBuilder在服務器端形成表內容並使用標記(替換迭代器)編寫最終字符串。