2010-08-30 44 views
0

我又得到了這個問題...struts2數據切割字符串發送到jsp

所以我在我的Struts2應用程序中有String數據。這個數據是相當大的,從閱讀HTML代碼爲36KB數據:

 BufferedReader reader = new BufferedReader(new FileReader("FILE.html")); 
     String readData; 
     while((readData = reader.readLine()) != null) { 
      fileData.append(new String(readData.getBytes(),"UTF-8")); 
     } 
     reader.close(); 
     fileData.trimToSize(); 
     this.data2display = fileData.toString(); 
     this.setData2display(this.data2display.replaceAll("\\s+", " ")); 

我在JSP文件中顯示data2display,只有:

<s:property value="data2display" escape="false" escapeJavaScript="false" /> 

Aaaaaand ...這個數據是整個,而我」 m調試控制器,但是當我嘗試在jsp中顯示這個。我只有部分數據。我沒有任何錯誤/調試日誌。

任何想法如何檢查/修復它?

我的應用程序:(struts2,jsp)一切從appfuse-basic-struts原型。

回答

1

我的個人起點將是PropertyTag的來源,並從此處跟隨代碼。

在這種情況下,從PropertyTag開始。你會發現它擴展了ComponentTagSupport,而這又擴展了StrutsBodyTagSupport

這是它變得有趣的地方; toString方法使用FastByteArrayOutputStream,它使用8192字節的默認塊大小(緩衝區)。使用默認的構造函數,如StrutsBodyTagSupport所做的那樣,您不能輸出一個字符串,其數據比這個更多。

不是Struts的專家我不願意說這是一個實現bug;它應該IMHO計算要打印的value的緩衝區大小。不幸的是,事實並非如此。所以我不認爲有一個簡單的方法。

非簡單的方法顯然是定義一個小於8k字節的字符串數據部分列表,並在JSP中迭代該列表,或者只是使用c:out或類似的東西。

這可能不是你要找的答案,但我希望這將在至少幫你瞭解你的麻煩。

+0

謝謝,這正是我一直在尋找! ;) – tzim 2010-08-30 11:53:42

+0

@tzim結合Google的開源之美:) – extraneon 2010-08-30 14:06:30