WebWork2.2新特性(四):使用国际化拦截器


其实这个I18nInterceptor很简单,而且实际应用中根据实际需求需要进行变通,所以这个I18nInterceptor并不是很实用,当然还是提供了一定的参考作用的.

首先我们来看一下如何使用这个拦截器.

首先我们需要有一个Action,为了演示,其实最简单的Action就可以,例如

public class I18nIcAction extends ActionSupport

public String execute()
{
return SUCCESS;
}

展示的页面例子如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>Test I18n Interceptor</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
Choose: <a href="?locale=en">English Page</a> ,
<a href="?locale=zh_CN">Chinese Page</a>
<br><br>
Content:<ww:text name="desc"/>
</body>
</html> 


其中我们使用"locale"作为locale的参数名,页面里面有2个选项:英文和中文.

对应的资源文件有2个(或者3个,如果包括缺省一个的话):

英文的I18nIcAction_en.properties内容为:
desc=english

中文的I18nIcAction_zh_CN.properties内容为:
desc=\u7b80\u4f53\u4e2d\u6587

接下来我们在xwork.xml里面定义我们的action和拦截器:

<package name="i18nic" extends="webwork-default" namespace="/i18nic">
<interceptors>
<interceptor name="i18n" class="com.opensymphony.xwork.interceptor.I18nInterceptor">
<param name="parameterName">locale</param>
<param name="attributeName">ww_locale</param>
</interceptor>

<interceptor-stack name="i18nStack">
<interceptor-ref name="i18n"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>

<default-interceptor-ref name="i18nStack"/>

<action name="index" class="com.jscud.ww2test.i18nic.I18nIcAction">
<result name="success" type="dispatcher">
<param name="location">/i18nic/index.jsp</param>
</result>
</action>
</package> 

所有的工作都好了,发布并运行访问 /i18nic/index.action,一切和预想的一样.


通过查看I18nInterceptor的源码,我们可以看到这个拦截器的工作原理是这样的:

  1. 如果参数中指定了locale,那么拦截器分析参数,并把locale保存到session中.
  2. 在后面的action中,拦截器从session中获取这个locale,并设置action的locale,从而保持用户的设置.
  3. 在后续页面还可以继续切换locale.

从源码分析结果来看,这样做也会有一些实际的问题:

  • session过期后,用户不知道发生了什么,系统使用缺省的locale.
  • 只能影响通过action操作的页面

在实际使用中,我们也要考虑如何解决后面2个问题,例如通过cookie,或者把用户的配置保存在数据库里等,这些实现就要结合实际代码进行实现了,完全可以不需要这个I18nInterceptor就可以实现,当然也很简单.

各取所需,看自己的实际需要吧 :)


除经特别注明外,本文章版权归JScud Develop团队或其原作者所有.
转载请注明作者和来源. scud(飞云小侠) 欢迎访问 JScud Develop

 

posted on 2005-08-31 15:46 Scud(飞云小侠) 阅读(3132) 评论(10)  编辑  收藏 所属分类: WEB

评论

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-08-31 16:07 dudu

你的几篇文章都影响了首页的显示, 请调整好格式再发布。  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-08-31 16:31 scud

... 可是我编辑的时候已经我浏览的时候都是对的,就是blogjava首页不对...看源码也看不出原因啊  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-08-31 20:32 dudu

现在好了。  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-11-16 11:41 Sue

hi,我根据你说的方法做了,可是,有这样的错误信息:
严重: Could not execute action
java.lang.IllegalStateException: Cannot find message associated with key parameterMap.locked
at org.apache.catalina.util.ParameterMap.remove(ParameterMap.java:204)
at com.bcbs.ecbp.util.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:62)

错误在代码行:
Object requested_locale = params.remove(parameterName);
parameterName打印出来的值是:locale  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-11-16 12:02 scud(飞云小侠)

com.bcbs.ecbp.util.interceptor.I18nInterceptor 是什么??

文章里没有用这个啊  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-11-16 13:52 Sue

我用的是ww2.1.7,所以就从ww2.2 copy出来放到com.bcbs.ecbp.util.interceptor.I18nInterceptor的...  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-11-16 15:10 scud(飞云小侠)

看看这个吧
http://wiki.opensymphony.com/pages/viewpage.action?pageId=10

我没有在2.1.7下用过这个拦截器

或者是其他地方你写错了什么...这个我无从猜测..

  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2005-11-18 17:02 sue

好的。谢谢你了。  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2006-02-04 07:53 fdg

按照你的文章做,可是没有成功,这么简单的搞这么久都没成功,有些失去信心。
能不能把例子做成附件,提供下载  回复  更多评论   

# re: WebWork2.2新特性(四):使用国际化拦截器 2006-02-04 08:06 fdg

你的这个例子要用那些jar呀?
我把webwork2.2中starter(可以运行)中的包全部拷过来,tomcat日记提示:
严重: Error listenerStart
2006-2-4 7:55:22 org.apache.catalina.core.StandardContext start
严重: Context [/i18nic] startup failed due to previous errors  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2005年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

公告

文章发布许可
创造共用协议:署名,非商业,保持一致

我的邮件
cnscud # gmail


常用链接

留言簿(14)

随笔分类(110)

随笔档案(102)

相册

友情链接

技术网站

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜