我可以在 Struts2 中重写会话属性 WW_TRANS_I18N_LOCALE 吗?我想在cookie中设置语言环境以备将来使用,因为默认会话的超时时间为30分钟,如果用户未使用该站点,则这对于语言环境来说是少量的。我试图根据cookie值设置WW_TRANS_I18N_LOCALE,但没有任何运气,价值保持不变。
我在这里发现了一个类似我的问题,但我的所有jsp都通过了动作https://stackoverflow.com/questions/5291271/struts-2-internationalisation-problem,这不是解决方案..
答案 0 :(得分:1)
所以你想改变一个动作中的会话值?我不清楚最后一行,但只是实现SessionAware然后它应该是直截了当的。设置值的最佳位置可能是用户登录的位置(如果有的话)。
像...一样的东西。
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
public class MyAction extends ActionSupport implements SessionAware{
Map<String, Object> session;
@Override
public String execute(){
session.put("WW_TRANS_I18N_LOCALE", "fr");
return SUCCESS;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
应该这样做。大多数其他范围都有识别界面,请参见本页顶部:http://struts.apache.org/2.0.11/struts2-core/apidocs/org/apache/struts2/interceptor/package-summary.html
修改强>: 考虑到这一点,我不建议使用cookie来存储语言首选项。但是如果你这样做...默认的i18n拦截器将检查是否存在名为“request_locale”的参数,并将会话上的值设置为该值。您不希望会话中存储值。但是,由于这是struts2默认处理这个问题的方法,你可以执行以下操作:
有关i18n拦截器的信息:http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/I18nInterceptor.html
对于JS函数,因为我偏爱jQuery,所以我要从这个开始:http://plugins.jquery.com/project/jsper
或者这......