tomcat处理错误页面时没有语言环境?

时间:2012-02-10 05:50:34

标签: java tomcat internationalization locale stripes

我有一个奇怪的问题,本地化工作很好,除了我们的错误页面。

我正在使用Stripes框架,资源包和JSTL标记来本地化我的页面。语言环境由Stripes框架确定。根据条纹documentation

  

Stripes使用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。

在设置区域设置的代码中,我们还设置了一些会话属性,“lang”和“country”。

作为一种解决方法,我发现我可以阅读这些属性并重新构建语言环境,但我想知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:1)

您的错误页面可能无法通过Stripes Filter。 尝试从404页面重定向Stripes页面。这可能会解决问题。

答案 1 :(得分: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>