Нет локали, когда tomcat обрабатывает страницы ошибок? - PullRequest
3 голосов
/ 10 февраля 2012

У меня странная проблема, когда локализация работает отлично, кроме как на наших страницах с ошибками.

Я использую инфраструктуру Stripes, пакеты ресурсов и тег JSTL для локализации своих страниц. Локаль определяется рамкой Stripes. Согласно документации Stripes :

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.

В коде, который устанавливает Locale, мы также устанавливаем некоторые атрибуты сеанса, "lang" и "country".

В качестве обходного пути я обнаружил, что могу читать эти атрибуты и восстанавливать локаль, но мне хотелось бы знать, почему это происходит в первую очередь.

Ответы [ 2 ]

1 голос
/ 16 октября 2012

Оказывается, проблема была в том, что 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>
1 голос
/ 15 февраля 2012

Ваша страница с ошибкой может не проходить через фильтр полос. Попробуйте перенаправить страницу полос с вашей страницы 404. Это может решить проблему.

...