|
Posted on 2006-07-24 22:59 大大毛 阅读(439) 评论(0) 编辑 收藏 所属分类: Struts
前言: 虽说刚看"精通Struts"几章,已经迫不及待的想试试它的"国际化"效果了.测试环境:JDK1.4 + Tomcat5 + 中文XP
先用的方法是网络上流行的方法: 在IE/Internet选项/语言 中删除掉中文,选择英文,如此类推,则可以看到页面的国际化效果. 但是这种方法有缺点: 1.很麻烦; 2.非常的不灵,刚开始俺整了几回都偶尔出效果了,但是玩这招多了,Tomcat5.0.29就再也不理我了,任我怎么变,它依旧显示中文. 基于第2点那是非解决不可啊
分析: 按"精通Struts"里面对于Struts国际化的解释,应该是页面会从Session(如果有的话)中取出Locale对象,只有当该对象为空时才会将request中的Locale对象放入session中去,而资源文件的选择是依据session中的Locale对象的,如此这般,就可以拿出一个简单点演示国际化效果的方法来: 提供一个JSP让用户选择语种,如英文,中文.提交到Action时 来个相应处理
if
(action.equalsIgnoreCase(
"
english
"
)) { request.getSession().setAttribute(Globals.LOCALE_KEY,
new
Locale(
"
en
"
,
""
)); }
if
(action.equalsIgnoreCase(
"
chinese
"
)) { request.getSession().setAttribute(Globals.LOCALE_KEY,
new
Locale(
"
zh
"
,
"
CN
"
)); }
这样做应该是符合Struts的要求的,结果测试失败.
解决办法: 事实证明,并不是理解Struts有误, 问题只是出在容器的处理方法上,还是按上面的方法,搭配Tomcat5.5测试成功,现在要想看"国际化"的效果就轻松多了,只要在应用的主菜单上加入语言选项,以后的各种跳转都一切OK.
还存在的问题: 经测试证明,这种方法能够达到根据菜单自动切换语种显示的目的,但是也注意到了一点,就是 request.getLocale(); 方法得到的始终都是本机IE的编码,这与session中存放的那个Locale是不一致的,当然也是利用了Struts需要先判断session中的Locale对象是否为空才进行改变这一点.不过这也带来这种演示方法的局限性: 1.有些Struts应用是允许客户端在应用的过程中改变Locale的,因此为此覆盖了RequestProccessor.proccessLocale()方法,支持动态的更新.这样会造成此种演示方法的可耻失败; 2.必须依赖于session, 3.如果程序中存在有手工从资源文件中取资源的情况(如我提到过的标签中的使用),那么
getMessage( (Locale)session.getAttribute(Globals.LOCALE_KEY) , key
)
与
getMessage( request.getLocale() , key )
的效果是会完全不同的.
有关Tomcat5.5的一点提示: 网上有说
Tomcat5.5
是不能与 JDK1.4 搭配使用的,只能用 JDK5 ,这是错误的. Tomcat5.5如果搭配 JDK1.4 使用的话,需要注意一点的是: 1.不能使用那个for windows 的EXE安装文件,需要下载ZIP文件进行安装; 2.除了必需下载的那个 apache-tomcat-5.5.x.zip 主体文件外,使用 JDK1.4 还必须下载那个 apache-tomcat-5.5.x-compat.zip 文件才行,下载回来后解压到同一个目录中即可直接使用. 3.手工添加管理员 向Tomcat\conf\tomcat-users.xml中加入 <role rolename="admin" /> <role rolename="manager" /> <user username="admin" password="你的密码" roles="admin,manager" />
另外Tomcat5.5与Tomcat5.0还有一个显著的区别就是在数据源的使用上 Tomcat5.0是用的DBCP数据源的,因此common/lib下有DBCP需要用到的包; 而Tomcat5.5则不同,如果想要使用DBCP数据源的话,需要手工向common/lib下加下DBCP所需的包: commons-dbcp-1.2.1.jar; commons-collections-3.1.jar; commons-pool-1.2.jar;
|