9.4 资源文件读取顺序
在进入具体示例之前,先来写一个Action,然后配置9.3.2节中的jsp作为这个Action的结果页面,好方便本节知识的示范。
这个Action非常的简单,什么都不做,只是让execute方法返回SUCCESS即可。示例代码如下:
java代码:
- package cn.javass.i18n;
- import com.opensymphony.xwork2.ActionSupport;
- public class I18NAction extends ActionSupport{
- public String execute() throws Exception {
- return SUCCESS;
- }
- }
在struts.xml中,配置9.3.2节中的jsp为这个Action的后继页面。
java代码:
- <action name="i18nAction" class="cn.javass.i18n.I18NAction">
- <result>/i18n/result.jsp</result>
- </action>
接下来测试的时候,都直接访问http://localhost:9080/helloworld/i18nAction.action即可。
注意:本节中的访问,都是在浏览器使用中文zh_CN的前提下访问的。
9.4.1全局级资源文件
在9.3节中,使用的就是全局级资源文件。全局级资源文件只需要在struts.xml中或者struts.properties文件中设置常量值struts.custom.i18n.resources即可。
仍以前面在struts.xml中的设置为例,示例如下:
java代码:
- <constant name="struts.custom.i18n.resources" value="message"/>
这里设置的message就是一组国际化资源文件名的前缀。如果有多组国际化资源文件,则以逗号分隔。如“message,dictionary”,就表示还另有一套以dictionary为前缀名的国际化资源文件,这些文件都放在classpath的根目录上。
9.4.2包级资源文件
包级资源文件指的是,在当前访问的Action的同包下,声明一组package.properties,可能包括package.properties、package_zh_CN.properties、package_en_US.properteis等等。注意文件名称就是叫package.properties,而不是“包的名称.properties”。
要设置包级资源文件,就必须放在Action这个类的同包下,比如可以建立一个package_zh_CN.properties,放在测试使用的Action同包下,示例如下:
java代码:
- labela = labela in zh_CN with package
这时,再次测试,会发现显示的就是刚刚设置的“labela in zh_CN with package”了。当然,在这个包下所有Action以及Action的后继页面,都可以访问这个文件中的信息。
如果包级资源文件和全局级资源文件同时存在,则包级资源文件覆盖全局级资源文件中的同key的信息。
9.4.3类级资源文件
1:类级资源文件入门
类级资源文件比较复杂,这里先做一个简单的示例。可以在当前访问的Action类的同包下,声明一组以该Action类名为前缀的国际化资源文件,可能包括Action类名.properties、Action类名_en_US.properties、Action类名_zh_CN.properties等等。
比如访问的Action是cn.javass.i18n.I18NAction,那么,要设置的包级资源文件,就必须放在cn.javass.i18n这个包下,比如来建立一个I18NAction_zh_CN.properties文件,示例如下:
java代码:
- labela = labela in zh_CN with action
这时,再次访问就会发现显示的就是刚刚设置的“labela in zh_CN with action”了。当然,在这个Action以及这个Action的后继页面,都可以访问这个文件中的信息。
如果类级资源文件和包级资源文件同时存在,则类级资源文件覆盖包级资源文件中的同key信息。
2:多种类级资源文件及其覆盖顺序
类级资源文件最为复杂,并不仅是一种,而是分为四种:
- ActionClass:资源文件名称的前缀必须与Action类名一致,在上面的示例中使用的就是这种。
- MyInterface:资源文件名称的前缀必须与Action实现的某一个接口名称一致,这个实现关系也并不一定是直接的实现关系,也有可能是当前类实现的接口的父接口,也有可能是当前类的父类实现的接口。
- MySuperClass:资源文件名称的前缀必须与Action的父类名一致,这个实现关系也并不一定是直接的继承关系,也可能是当前类的父类。
- 如果动作类实现了ModelDriven接口,那么也会查找getModel方法返回类型的资源文件。
如果多种资源文件同时出现,将遵照上述类型出现的顺序进行覆盖,即ActionClass最优先,它会覆盖其他所有的资源文件,最常用的也是ActionClass这种方式。
9.4.4资源文件的覆盖顺序
资源文件很多,它们的覆盖顺序为:类级>包级>全局级。
做个示例来体会一下,比如为前面示例的I18NAction,同时设置类级、包级和全局级的资源文件,然后来访问看看效果。
1:先来准备资源文件
类级资源文件,名称为:I18NAction_zh_CN.properties,放在I18NAction同包下,内容为:
java代码:
- labela = labela in zh_CN with action
包级资源文件,名称为:package_zh_CN.properties,放在I18NAction同包下,内容为:
java代码:
- labela = labela in zh_CN with package
全局级的资源文件,名称为:message.properties,放在src下,内容为:
struts.xml的内容如下:
java代码:
- <struts>
- <constant name="struts.devMode" value="true" />
- <constant name="struts.custom.i18n.resources" value="message"/>
-
- <package name="helloworld" extends="struts-default">
- <action name="i18nAction" class="cn.javass.i18n.I18NAction">
- <result>/i18n/result.jsp</result>
- </action>
- </package>
- </struts>
2:运行看看效果,此时的输出应该是
java代码:
- labela = labela in zh_CN with action
3:把I18NAction_zh_CN.properties文件中的labela改个名称,不管改成什么,不是“labela”就行,然后重新启动服务器,再次运行,看看效果此时的输出应该是:
java代码:
- labela = labela in zh_CN with package
4:把package_zh_CN.properties文件中的labela改个名称,不管改成什么,不是“labela”就行,然后重新启动服务器,再次运行,看看效果此时的输出应该是:
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4086.html】
欢迎访问http://sishuok.com获取更多内容
分享到:
相关推荐
10. **国际化(Internationalization, i18n)**:Struts2支持多语言环境,通过资源包(properties文件)来实现。源代码中可能有相关的资源配置和使用。 通过研究这些源代码,你可以逐步掌握Struts2的精髓,包括如何...
为了让应用程序能够适应不同的语言环境,Struts2提供了国际化支持。 #### 11.2 国际化实现 - **资源文件**:使用.properties文件来存放不同语言的文本。 - **切换语言**:可以通过设置locale参数来切换语言。 ###...
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
4. **国际化与多语言支持**:介绍如何在Struts 2应用中实现多语言支持,包括资源文件的使用方法。 5. **高级主题**:例如自定义拦截器、文件上传下载、AJAX支持等内容。 6. **实战案例**:通过一个或多个实际项目,...
Struts2的国际化和本地化支持也是重要的知识点,这对于构建多语言的应用至关重要。 在实际开发中,Struts2的异常处理机制和错误页面配置也是不可忽视的部分。开发者需要了解如何优雅地处理程序中的异常,以及如何...
研磨Struts2 高清完整版,请和第一部分一起下载啊
12. **其他重要知识**:Struts2还涉及国际化、异常处理、主题与皮肤、动态方法调用等多个高级主题,这些内容使得Struts2能够应对复杂的Web应用需求。 通过《研磨Struts2》,读者可以系统地学习Struts2框架的各个...
研磨Struts2_12859679_高清完整版
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) ...
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) ...
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) ...
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式...
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) ...