关于Struts2 国际化直接访问jsp读取Local修改

由于使用Struts2自带的国际化i18;在直接访问jsp页面时,多语言手动切换失败(如a标签链接);所以找了一些资料,发现是由于没有经过Struts2的action所以默认是获取本地Locale,而解决的方法有两种(自己猜的),一种是写一个filter和action类,在让所有直接访问都通过action;另外一种就是修改Struts2的依赖包xwork-core-2.3.34.jar的源代码。

我用的是改源码的方式:将xwork-core-2.3.34.jar中ActionContext.java中getLocale()方法修改为如下方法(参考 http://blog.csdn.net/zollty/article/details/8710718):

/*     */   public Locale getLocale()
/*     */   {
/*     */     Locale locale = null;
/*     */     Object tempObj = get(SESSION);
              if (null != tempObj) {
             tempObj = ((Map<String, Object>) tempObj)
             .get("WW_TRABS_I18N_LOCALE");
             if (null != tempObj){
               locale = (Locale)tempObj;
               setLocale(locale);
                }
/*     */     }
/*     */ 
/* 225 */     if (locale == null) {
            tempObj = (Locale)get("com.opensymphony.xwork2.ActionContext.locale");
            if (null != tempObj){
               locale = (Locale)tempObj;
            } else {
             locale = Locale.getDefault();
             setLocale(locale);
            }
/* 226 */       
/*     */     }
/*     */ 
/* 230 */     return locale;
/*     */   }
 
在这里顺便记一下修改源码方法:
先用反编译工具(jd-gui.exe)打开xwork-core-2.3.34.jar,找到ActionContext.class,保存其为ActionContext.java;
然后利用myeclipse创建com.opensymphony.xwork2包将ActionContext.java移入,这时候应该可以去项目路径去找class文件了

 

然后用解压工具打开xwork-core-2.3.34.jar替换ActionContext.class就OK了

posted on 2018-01-08 15:49  铭--为将来  阅读(450)  评论(0编辑  收藏  举报