Struts2 的 XSLTResult 中文問題
Struts2 在近期版有個滿吸引我的特色,便是在 View 層可以將 action object 藉由 Xalan 來轉成 XML 格式資料,並透過 XSLTResult 套上指定的 xsl 樣版輸出成網頁。
不過在測試的過程中發現,似乎目前的 2.0.x 版還無法支援 xsl:include 與 xsl:import 這類的語法,所以跑去 Struts 的 Issue Tracker 上面看看是不是有類似的 issue 有被提出來,於是看到了 [WW-2334] 與 [WW-2561]。看起來是要用 response 的 protocol 來指定到正確的 xsl 樣版路徑,這個功能在 2.1.x 版才有支援。
在換上了 2.1.x 版的 Struts2 後,的確是可以用 xsl:include 來引入其它的 xsl 樣版了,但看起來只要是非英語系的字元都會爛掉。根據過去的經驗,猜想應該是 XSLTResult 這個 class 內部在用PrintWriter 輸出時少做了編碼的動作,才使得中文會爛掉。
最直覺的解法就是 extends 原本的 XSLTResult class,然後再 overwrite 它的 execute() method,在建立 PrintWriter 的時候就先指定 UTF-8 的編碼︰
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter writer = new PrintWriter(new java.io.OutputStreamWriter(response.getOutputStream(), "UTF-8"));
然後再 struts.xml 裡設定 result-types 是要用這個自訂的 XSLTResult class︰
<result-types>
<result-type name="xslt2" class="com.hyweb.searchg2.views.xslt.HyXSLTResult"/>
</result-types>
於是輸出的 HTML 網頁便可以順利顯示中文字元了。


Struts2 的 XSLTResult 中文問題
我也有同樣的困擾
可否說明白點要如何修改
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter writer = new PrintWriter(new java.io.OutputStreamWriter(response.getOutputStream(), “UTF-8″));
要在哪改??
我是用Struts2 2.0.12 也可以修正中文問題嗎??
謝謝
jean
十一月 28, 2008 at 3:32 午後
http://www.javaworld.com.tw/jute/post/view?bid=42&id=245986&sty=1&tpg=1&age=0
看起來你已經解決了, 這一點也不會難啊兄弟…
Keanu
十二月 13, 2008 at 3:32 午後