Как установить локаль в классе пользовательских действий и получить его в другом классе Java? - PullRequest
1 голос
/ 01 марта 2012

Я новичок в Java и Struts2.Мне нужно изменить локаль, когда пользователь нажимает на текст на странице jsp. Мне нужно сделать это, установив атрибут сеанса с помощью класса действия

Jsp: (так это будет выглядеть примерно так)

    <richtext>[url="switchLang?lang=de"]Deutsch[/url]</richtext>

, где "switchLang" сбрасывает язык в сеансе пользователя.

SwitchLangAction.java:

    public class SwitchLangAction extends ActionSupport implements SessionAware {
        Map<String, Object> session;
    @Override
        public String execute(){
            session.put("WW_TRANS_I18N_LOCALE", "de");
            return SUCCESS;
        }
        @Override
        public void setSession(Map<String, Object> session) {
            this.session=session;
        }
    }

Мне нужно получить объект сеанса в другом файле .javaи получить локаль.Как мне это сделать?

     class test{

    // I need to fetch the locale here 
    }

  1. Что мне делать в классе switchlang.java ???Правильно ли указано ниже: switchLang.java?

  2. Файл footer.jsp является частью каждой страницы сайта.Мне нужно перезагрузить текущую страницу с изменениями языка. Как мне это сделать?

footer.jsp:

    <richtext>
    [url="switchLang?request_locale=de"]Deutsch[/url]   
    [br]
    [url="switchLang?request_locale=en"]English[/url]
    </richtext>

switchLangAction.java:

    public class SwitchLangAction extends ActionSupport implements SessionAware {
        Map<String, Object> session;
    @Override
        public String execute(){
        session.put("WW_TRANS_I18N_LOCALE", "de");
            return SUCCESS;
        }


        @Override
        public void setSession(Map<String, Object> session) {
            this.session=session;
        }
    }

Struts.xml: // Как перезагрузить ту же страницу?

<action name="switchLang" method="execute" class="com.mobile.action.SwitchLangAction">
    <result name="success" type="redirectAction">?????</result>
</action>

1 Ответ

2 голосов
/ 01 марта 2012

Если вы хотите извлечь объект сеанса в другом java / action для класса в определенный пользовательский языковой стандарт, чем я считаю, есть другой, очень чистый и эффективный способ, который S2 предоставляет из коробки.

Стек по умолчанию уже включает перехватчик с именем I18n Interceptor, который позаботится о работе с языком пользователя в сеансе пользователя.

Этот перехватчик работает с двумя параметрами

  • имя_параметра (необязательно) - имя параметра запроса HTTP, который предписывает языковой стандарт для переключения и сохранения в сеансе. По умолчанию это request_locale.
  • attributeName (необязательно) - имя ключа сеанса для сохранения выбранного языкового стандарта. По умолчанию это WW_TRANS_I18N_LOCALE.

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

У вас есть следующий вариант, чтобы попросить S2 выполнить для вас специальную работу I18N

  1. <richtext>[url="switchLang?lang=de"]Deutsch[/url]</richtext> вместо lang=de используйте request_locale в качестве ключа параметра, а S2 позаботится обо всем остальном.
  2. Если вы не можете изменить ключ параметра, создайте скрытое поле с именем request_locale и задайте значение локали до отправки формы.
...