struts2国际化 struts2多语言_第1页
struts2国际化 struts2多语言_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

struts2国际化struts2多语言最近正在打算给分析工具加上国际化的支持。原本以为国际化是一件很简单的事情,中间发生了一个问题,让我重新认识了struts2.顺便说一下,网上关于struts2多语言支持的文章,多半都是有问题的,国际化的支持不需要新建类,甚至不需要手动设置session。struts2国际化的支持做的实在是很牛逼,按照网上的说明能很容易的写出demo来,并且基本上能一次测试通过。但是,我的程序发生了点意外,如果没有意外,我也不会去研究的那么深入。。。。。。如果要看入门的,请不要往下看了,网上已经有很多了先看我的程序登录页面国际化代码<divid="language"><s:textname="login.language"/><s:selectname="request_locale"id="request_locale"value="#session['WW_TRANS_I18N_LOCALE']"list二"%{#{'zh':'中文',’en':'English'}}"onchange="changeLanguage();"></s:select></div>functionchangeLanguage(){$.ajax({url:'relogin.htm',type:'POST',data:'request_locale='+$("#request_locale").val(),success:function(msg){window.location.reload();}});}主页面框架代码<framesetcols="20%,*"border="1"><framesrc="<%=request.getContextPath()%>/page/menu.jsp"name="menu"marginHeight="0px"marginwidth="0px"scrolling="no"></frame><framesetrows="30,*"border="0"><framesrc="<%=request.getContextPath()%>/page/top.jsp"name="top"></frame><framesrc="<%=request.getContextPath()%>/page/configure/welcome.html"name="main"></frame></frameset></frameset>其中menu.jsp和left.jsp都需要用到国际化。神奇的现象出现了,menu.jsp和left.jsp都没有使用国际化,而之前的登录页面上,国际化做的很好。。。。。。难不成是神仙显灵了???按照一般的经验,这个是完全没理由的,之前的页面国际化做的很好,后面的页面国际化失灵了????中间略去很多痛苦的过程,下面贴出我的研究结果struts2在国际化上面,有两个地方存放了Locale属性,一个是ActionContext.setLocale();还有一个是session.getAttribute("WW_TRANS_I18N_LOCALE")ActionContext中的属性是在FilterDispatcher.prepareDispatcherAndWrapRequest的时候被设置进去的,这个值一直是HTTP协议头中的Localesession中的变量是在I18nlnterceptor被调用的时候,被设置进去的,这个值是参数中通过request_locale传输进去的国际化的输出,是调用text标签或者getText方法来实现的,这边需要使用到ActionSupport中的TextProvider对象,这个对象将会调用最终的ResourceBundle进行输出。而TextProvider的却是在ActionSupport初始化的时候,调用ActionContext.getLocale()生成的。换句话说,session中的Locale对象,在国际化的输出中没有发挥任何作用,session中的Locale对象,是为了保存用户输入的自定义的Locale对象,以及给ActionContext赋值用的。而我的问题发生在,在主页面显示的请求过程中,并没有调用到I18nInterceptor。。。FilterDispatcher是配置的所有的连接都会调用的,问题就发生在主页面在显示frame的时候,使用的是直接调用jsp的方法来实现的,在ActionContext.setLocale()—直都浏览器本身的Locale,但是并没有触发I18nlnterceptor,所以,session中保存的Locale没有被覆盖出来,导致页面上一直都显示是浏览器的语言。。。。知道原因以后,解决方法就好办很多,只要把主页面的frame稍加改变就解决了这个问题<framesetcols="20%,*"border="1"><framesrc="<%=request.getContextPath()%>/page/menu.htm"name="menu"marginHeight="0px"marginwidth="0px"scrolling="no"></frame><framesetrows="30,*"border="0"><framesrc="<%=request.getContextPath()%>/page/top.htm"name="top"></frame><framesrc="<%=request.getContextPath()%>/page/configure/welcome.html"name="main"></frame></frameset></frameset>让本来直接请求jsp的,经过一下action的中转,尽管程序本身没有写任何东西,但是在执行过程中却会把本来没有执行的I18nInterceptor,给加进去,会用session中已经存在的Locale覆盖掉浏览器传输的Locale,问题就解决了。引申

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论