Skip to content

Struts2 的 XSLTResult 中文問題

八月 20, 2008

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 網頁便可以順利顯示中文字元了。

廣告
2 則迴響 leave one →
  1. jean permalink
    十一月 28, 2008 3:32 下午

    Struts2 的 XSLTResult 中文問題
    我也有同樣的困擾
    可否說明白點要如何修改
    HttpServletResponse response = ServletActionContext.getResponse();
    PrintWriter writer = new PrintWriter(new java.io.OutputStreamWriter(response.getOutputStream(), “UTF-8″));

    要在哪改??
    我是用Struts2 2.0.12 也可以修正中文問題嗎??
    謝謝

  2. Keanu permalink*
    十二月 13, 2008 3:32 下午

    http://www.javaworld.com.tw/jute/post/view?bid=42&id=245986&sty=1&tpg=1&age=0

    看起來你已經解決了, 這一點也不會難啊兄弟…

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: