Как использовать перехватчик на странице по умолчанию? - PullRequest
1 голос
/ 23 декабря 2010

Вот моя ситуация: в веб-приложении я использую перехватчик для установки языка (Locale).Если пользователь вошел в систему, я использовал свойство языка этого пользователя.Иначе, если установлен cookie, я использую значение этого cookie.Иначе, я использую настройки браузера.

Это хорошо работает, когда я захожу в приложение и когда я вошел в систему.

Проблема на странице приветствия, так как она вызывает mydomain.com / index.jsp, он не проходит через перехватчики, поэтому язык не установлен (он всегда использует настройки браузера).

Есть ли способ пройти через перехватчики на странице индекса илиустановить значение Locale на странице index.jsp?

Спасибо!

Решение:

Я удалил .jspиз index.jsp в файле web.xml:

<welcome-file-list>
  <welcome-file>index</welcome-file>
</welcome-file-list>

Я добавил действие index в свой файл struts.xml:

<default-action-ref name="index" />

<action name="index">
  <interceptor-ref name="appStack" />
  <result name="success">index.jsp</result>
</action>

Перехватчик языка является частьюappStack.

Спасибо, ребята, за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Я рекомендую вам сделать одно из двух: (ваш выбор)

(1) Реализуйте вашу логику в веб-фильтре и настройте свой контейнер с этим фильтром, чтобы вы могли установить язык (если нет)уже установлено).Это легко сделать, просто посмотрите на любой пример фильтра HelloWorld.

или ...

(2) Убедитесь, что ваша домашняя страница доступна только как действие Struts2 (выможет определить действие по умолчанию в файле конфигурации Struts2) и убедиться, что ваш перехватчик является частью стека по умолчанию.

Надеюсь, это поможет!

1 голос
/ 24 декабря 2010

Я бы просто добавил плагин конвенций (struts2-конвенцииtions-plugin-x.x.x.jar), где x.x.x - версия, которую вы используете.

Тогда я бы переместил все общедоступные jsp-файлы в / WEB-INF / content и закончил.

В вашем web.xml я не упоминаю никаких файлов приветствия ... но если вы хотите быть явным:

<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>

При использовании Struts 2.2.1 ваш web.xml должен выглядеть как минимум ...

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
    <filter-name>action</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>action</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Если вы хотите сделать это методом struts.xml, просто переместите index.jsp в / WEB-INF и создайте для него отображение действия ... что-то вроде:

    <action name="index">
        <result>/WEB-INF/index.jsp</result>
    </action>

, который будет в пакете с пространством имен "/" или "".

С другой стороны, я давно не смотрел на Local, но вы уверены, что не изобретаете колесо ... перехватчик i18n уже находится в стеке по умолчанию.

Изучите его использование. Короче говоря, для каждого языка определены файлы свойств языка. Если Struts2 определил, что такие свойства используются, то теги struts будут искать значение в своем атрибуте name для соответствующей строки в файле свойств и возвращать значение этой записи карты.

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

...