2012-02-10 73 views
2

我有一個奇怪的問題,其中本地化工作很好,除了我們的錯誤頁面。當tomcat處理錯誤頁面時沒有語言環境?

我正在使用Stripes框架,資源包和JSTL標籤來本地化我的頁面。語言環境由Stripes框架確定。按照條紋documentation

條紋採用了HttpServletRequestWrapper來將調用request.getLocale()和request.getLocales()只返回所選擇的語言環境。這意味着不僅Stripes將使用正確的語言環境而不必重新確定它,但任何其他依賴於request.getLocales的本地化工具都應該默認使用正確的語言環境。這包括JSTL fmt:*標籤 - 很酷吧?

這時候一個404或500錯誤發生,其引導到我們的錯誤頁面,其配置這樣在web.xml中,除了隨處可見的偉大工程:如果我直接瀏覽到錯誤

<error-page> 
    <error-code>404</error-code> 
    <location>/error.jsp</location> 
</error-page> 

頁面,本地化工作正常。舉例來說,如果我已經設置語言爲西班牙語,然後瀏覽到這個網址,出現在西班牙的頁面:

http://localhost:8080/error.jsp

但如果我設置語言爲西班牙語,然後瀏覽:

http://localhost:8080/this-page-does-not-exist-create-a-404-error

出現相同的錯誤頁面,但以英文顯示。

這是爲什麼,我該如何解決?我搜遍了所有沒有結果!

我應該添加,我已經嘗試手動檢查request.getLocale(),並將其設置爲en_US。

在設置Locale的代碼中,我們還設置了一些會話屬性「lang」和「country」。

作爲解決方法,我發現我可以讀取這些屬性並重新構建語言環境,但我想知道爲什麼會發生這種情況。

+0

真的嗎?沒有人有任何想法? – JBCP 2012-02-13 12:11:49

回答

1

事實證明問題是Stripes正在處理設置區域設置,但錯誤頁面沒有通過Stripes Dispatcher傳遞。解決方案是添加下面的ERROR行:

<filter-mapping> 
    <filter-name>StripesFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <servlet-name>StripesDispatcher</servlet-name> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 
0

您的錯誤頁面可能不會通過條紋過濾器。 嘗試從404頁面重定向Stripes頁面。這可能會解決問題。

+0

我是Stripes的新手,這很有道理。我怎麼做?這裏是我的web.xml配置,所以我猜你是對的:\t \t \t \t \t /error.jsp \t JBCP 2012-02-16 15:43:51

+0

複製'error.jsp'爲'error2.jsp'。改變錯誤。jsp'內容到<%@ page language =「java」contentType =「text/html; charset = UTF-8」pageEncoding =「utf-8」 %<% response.setHeader(「Location」,「 error2.jsp「); response.setHeader(「Connection」,「close」); %'' – hkn 2012-02-17 07:15:31