2012-02-10 59 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