其实这个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的源码,我们可以看到这个拦截器的工作原理是这样的:
- 如果参数中指定了locale,那么拦截器分析参数,并把locale保存到session中.
- 在后面的action中,拦截器从session中获取这个locale,并设置action的locale,从而保持用户的设置.
- 在后续页面还可以继续切换locale.
从源码分析结果来看,这样做也会有一些实际的问题:
- session过期后,用户不知道发生了什么,系统使用缺省的locale.
- 只能影响通过action操作的页面
在实际使用中,我们也要考虑如何解决后面2个问题,例如通过cookie,或者把用户的配置保存在数据库里等,这些实现就要结合实际代码进行实现了,完全可以不需要这个I18nInterceptor就可以实现,当然也很简单.
各取所需,看自己的实际需要吧 :)
除经特别注明外,本文章版权归JScud Develop团队或其原作者所有.
转载请注明作者和来源. scud(飞云小侠) 欢迎访问 JScud Develop