Struts 2 的国际化
2015-09-22 16:12
465 查看
1、Struts2 的国际化包括三个部分:前台页面的国际化(jsp页面)、Action类的国际化、验证配置文件的国际化。 2、Struts2 国际化资源文件的加载(只需要编写国际化消息的资源文件即可) 1)、加载全局资源文件 a、全局资源文件需要在struts.xml文件中配置<constant name="struts.custom.i18n.resources" value="全局资源文件名字"> b、在src目录下创建struts.properties文件并写入struts.custom.i18n.resources=全局资源文件名字 c、多个资源文件名以英文逗号(,)隔开。 2)、加载局部资源文件 a、指定包范围资源文件:在包根目录下建立package_<language>_<country>.properties(package基本名不可变)的资源文件,不需要配置。 b、指定Action范围资源文件:在Action类所在路径下创建ActionName_<language>_<country>.properties的资源文件,不需要配置。 c、临时范围的资源文件:在src目录中创建baseName_<language>_<country>.properties的资源文件,这种方式主要针对JSP视图页面。 <s:i18n name="baseName"> <!-- 指定临时资源文件 --> <s:text name="key"></text><!-- 显示资源文件的内容 --> </s:i18n> 注:Struts 会按照就近原则加载相应的资源内容。如:在Action类中通过getText("key")获取资源消息时会按照 Action资源文件-->包资源文件 -->全局资源文件 的顺序查找对应的资源内容;如果多个资源文件中都存在该key/value的话就选择最近的显示。 3、国际化资源消息的访问 1)、jsp 页面: <s:text name="key"></s:text> <s:property value="getText('some.key')" /> 2)、Action 类中: getText("key"); 3)、表单中:在标签中指定一个key属性 <s:textfield name="user" key="some.key"></s:textfield> 4)、验证文件中:<message key="some.key"></message> 4、国际化消息中占位符的使用 1)、当消息内容中存在变量时,可以用 {n} 占位符来代替。然后在调用时进行填充 2)、占位符的填充: a、JSP页面上的<s:text name="some.key"></s:text> 通过<s:param value="content"/> 标签来填充 b、Action中调用getText(String key, List args) 或 getText(String key ,String[] args) 的方式来填充占位符 5、Struts2 实现用户自行选择语言 1、通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。 2、Struts中提供了一个名为i18n的拦截器,并注册默认拦截器defaultStack中。i18n拦截器在Action方法执行前,会自动查找请求中一个名为 request_locale的参数,如果该参数存在,拦截器就自动将其转换成Local对象,并设置为用户的默认Locale(代表国家/语言环境),拦截器 会将参数设置在session中,每个请求默认的都会调用和设置。 6、所有页面的国际化 由于Sturts2 拦截器只能拦截Action请求,故所有被直接请求的jsp页面是不会被Struts2的拦截器拦截。也就不会应用之前设置的Locale而是使用 浏览器默认的(国家/语言环境)。解决方案为:让所有的重定向(redirect)到jsp界面的请求,转换成重定向(redirectAction)到Action的请求,经过 指定的Action然后转发到相应的jsp页面。 注:可以将不想让用户直接访问的jsp页面放在WEB-INF目录下(在该目录下的jsp页面用户是没有权限直接访问的,只能通过Action实现页面的跳转访问) 具体配置实例如下: <package name="mailreader-support" namespace="/" extends="mailreader-default"> <action name="Registration_*" method="{1}" class="mailreader2.Registration"> <result name="input">/WEB-INF/jsp/Registration.jsp</result> <result type="redirectAction">MainMenu</result> </action> </package> <package name="wildcard" namespace="/" extends="mailreader-support"> <action name="*" class="mailreader2.MailreaderSupport"> <result>/WEB-INF/jsp/{1}.jsp</result> </action> </package> 上面的配置结果:如果对Registration_*的请求执行成功,将跳转到MainMenu.jsp页面。因为最终的MainMenu.jsp页面是重定向到Action的结果。所以 Action拦截器还会自动使用先前用户设定的Locale(国家/语言环境)来响应MainMenu.jsp页面。
相关文章推荐
- java教程
- java多线程 synchronized volatile Atomic LOCK的使用
- test5.16
- Spring 代码知识查缺补漏
- FileChannel-Java 复制文件的高效方法
- eclipse调试java程序的九个技巧
- Spring Security hello world example
- JavaWeb开发中关于分页的实现
- Spring内部bean无法通过id获取
- week 3-1,3-2 java_se_1
- test5.15
- java 集合类
- 《Java编程思想》学习记录仪四 -- Java数组和作用域初步认识(第二章一切都是对象)
- Java虚拟机调优工具 jstack
- java 连接数据库mysql的语句怎么写
- Fragment中出现java.lang.NullPointerException 空指针 上下文为空时
- java学习9.21
- Java虚拟机的类加载机制
- 详解Java的自动装箱与拆箱(Autoboxing and unboxing)
- Java中必须了解的常用类