2008年2月9日 星期六

[Struts] Struts 解決中文問題

其實Struts 已經用了一陣子了!!當初自己在開發時,遇到最大的問題就是中文的問題!!

好在 LAB 有學長也是有碰過類似的經驗,大家討論之下終於有了答案... Filter

在每個 Struts 的請求中先透過 Filter 來作編碼的動作:

package filter.encoding;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

public class EncodingServlet extends HttpServlet implements Filter
{
    private FilterConfig filterConfig;

    //Handle the passed-in FilterConfig
    public void init(FilterConfig filterConfig) throws ServletException
    {
        this.filterConfig = filterConfig;
    }

    //Process the request/response pair
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain)
    {
        try
        {
            request.setCharacterEncoding("utf-8");
            filterChain.doFilter(request, response);
        }
        catch(ServletException sx)
        {
            filterConfig.getServletContext().log(sx.getMessage());
        }
        catch(IOException iox)
        {
            filterConfig.getServletContext().log(iox.getMessage());
        }
    }

    //Clean up resources
    public void destroy()
    {
    }
}

然後在 web.xml 中加入

<filter>
    <filter-name>EncodingServlet</filter-name>
    <filter-class>filter.encoding.EncodingServlet</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingServlet</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

就是讓所有對 Controller 發出 request 的請求都能夠先經過我們的 filter

網頁之間的編碼問題解決了!!

事情還沒結束勒~~~

因為 Struts 有一種 i18n 的機制,就是讓所有 Message 都包裝在一個 ApplicationResource.properties 之中

這個檔案裡面不能將中文很正確的在 view 中顯示,所以我們需要一個工具來輔助:property editor

下載的網址如下:
http://propedit.sourceforge.jp/index_en.html

因為我是用 Eclipse 來開發的,所以我是用他對於 Eclipse 的 plug-in

安裝方式網頁上有說,不是用下載的方式,而是可以透過 Eclipse 的安裝 feature 工具來 support

當你重新開啟 Eclipse 後,對於 *.properties 檔案按下右鍵選擇 [Open with] -> [PropertiesEditor]

就可以利用這個工具來編輯 *.properties 檔案

當然它看起來就跟一般 Eclipse 內建的工具差不多,只是如果你是輸入非英文字母,它會自動幫你轉成 UTF-8 的編碼方式

另外還有一點要注意,在 view 的編碼也要改成 UTF-8 不然,我也不知道會怎樣XD

最近找到有 support struts 在 eclipse 上的 plug-in ,可是似乎都不太好用~~

但是有一個工具也可以提供給大家:Struts Console

網址如下:
http://www.jamesholmes.com/struts/console/

他也是有支援 eclipse 讓我在開發時對於編輯 struts-config.xml 來說就不是只是看一堆 XML TAG 了

他的工具也支援 Validator and Tiles 的 struts plug-in

不過對大的缺點就是對於 struts 與支援到 1.2的版本,殘念!!

剩下對於支援 Struts 的工具就有限了!!

如果要開新的 struts project ,我個人是建議直接將 struts-blank.war 匯入後在去更改內容

因為這樣是最快的方法了!! 很多東西要重新撰寫很累人!!!

希望對正要開始開發 struts 的 programmer 來說會有一些些的幫助

P.S. 還是要感謝涼鳥學長在Struts 方面給的指導!!

沒有留言: