ssh之struts第一篇:struts国际化

开博之前本准备学习完ssh,然后做一demo为结尾的,但发现这三类框架的东西多多,于是乎决定分别学习回顾....闲话少说....

demo环境:myeclipse5.5+jdk1.5+tomcat5.5,demo步骤如下:

1.建一web工程,引入struts。(没有使用myeclipse的朋友自己将struts包导入)

2.先简单处理action、form、struts-config.xml等,使其正常启动,本文以简单登录为例

3.将引入struts产生的默认ApplicationResources.properties文件拉到一新建package下,package名称:resources

4.写入“login.success=哦,登录成功!”到ApplicationResources.properties, 作为我们登录成功的提示

5.在resources下新建2个.properties文件,分别为代表中文的ApplicationResources_zh_CN.properties和代表英文的ApplicationResources_en_US.properties

6.使用native2ascii 将ApplicationResources.properties中文转码到ApplicationResources_zh_CN.properties中,格式为utf-8

7.将login.success=oh,success!写入ApplicationResources_en_US.properties作为英文提示

8.在struts-config.xml中,配置resources信息:<message-resources parameter="com.gdcn.ssh.resources.ApplicationResources" />

9.在登录提示的页面将pageEncoding="UTF-8",并在<body>中写入:<bean:message key="login.success"/>

10.启动tomcat,查看中文提示效果是否正确。然后将ie语言设为英文关闭ie,重新打开一新的ie,查看英文提示是否正确!

 

注意点:

1.使用国际化页面的编码格式最好为utf-8

2.properties文件中英文要完整、正确

3.native2ascii 转码要正确。本文:native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties

 

优化及拓展:

1.每次中英文切换,要关掉ie然后重新打开才有效果的问题:

大家都知道,struts的处理机制是:*.do-->actionServlet-->requestProcessor-->action

其中在工程中actionServlet-->requestProcessor过程是看不到,但它是存在的。在requestProcessor类的众多方法中有个获取请求用户信息和语言方法:processLocale(),其源码如下

protected void processLocale(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
 {
  if (!moduleConfig.getControllerConfig().getLocale())
   return;
  HttpSession httpsession = httpservletrequest.getSession();
  if (httpsession.getAttribute(Globals.LOCALE_KEY) != null)
   return;
  java.util.Locale locale = httpservletrequest.getLocale();
  if (locale != null)
  {
   if (log.isDebugEnabled())
    log.debug(" Setting user locale '" + locale + "'");
   httpsession.setAttribute(Globals.LOCALE_KEY, locale);
  }
 }

大家可以看到,用户地区信息和语言是用Globals.LOCALE_KEY保存在新开浏览器时创建的session中,即使刷新N次页面,session中的值是不会改变的,所以改变ie语言后,需要重新打开浏览器才起到效果,怎么解决?对了,从上面代码中,我们可以看到每次的httpservletrequest.getLocale()获取的都是新的用户语言信息,所以问题迎刃而解了,处理方法:

1.在action方法中重新设置session的语言信息:request.getSession().setAttribute(Globals.LOCALE_KEY,request.getLocale());即可,当然如果大的项目,大家最好把此句放入filter或者其类中。

2.继承requestProcessor类,重写processLocale方法,具体怎么改写不再赘述,但有点不要忘记,struts-config.xml中配置实现类:<controller>
  <set-property property="processorClass" value="实现类路径"/>
 </controller>

 

注:关于struts的requestProcessor扩展及使用,本人近期将同struts的plugIn一同开博介绍,请朋友们捧场关注....谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值