我是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
}
我应该在switchlang.java类中做什么???我的下面是switchLang.java吗?
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>
答案 0 :(得分:2)
如果你想将其他java / action中的会话对象提取到类来确定用户首选的语言环境,那么我认为S2提供了开箱即用的其他非常干净和有效的方式。
默认堆栈已经包含一个名为I18n Interceptor
的拦截器,它将负责通过用户会话处理用户区域设置。
此拦截器使用两个参数
每次发出新请求时,此拦截器将负责在ActionContext
中设置用户区域设置,并根据用户请求设置区域设置。
您有以下选项要求S2为您处理I18N特定工作
<richtext>[url="switchLang?lang=de"]Deutsch[/url]</richtext>
代替lang=de
使用request_locale
作为参数键,S2将为您处理其余部分。request_locale
的隐藏字段,并在表单提交前设置区域设置值。