如何在自定义操作类中设置区域设置并在另一个java类中获取它?

时间:2012-03-01 03:34:05

标签: java struts2 locale

我是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是网站中每个页面的一部分。我需要用语言更改重新加载当前页面。我该怎么办?

  3. 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 个答案:

答案 0 :(得分:2)

如果你想将其他java / action中的会话对象提取到类来确定用户首选的语言环境,那么我认为S2提供了开箱即用的其他非常干净和有效的方式。

默认堆栈已经包含一个名为I18n Interceptor的拦截器,它将负责通过用户会话处理用户区域设置。

此拦截器使用两个参数

  • parameterName(可选) - 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的隐藏字段,并在表单提交前设置区域设置值。