《研磨struts2》第九章 国际化 之 9.4 资源文件读取顺序
2012-07-27 09:24
375 查看
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下,内容为:
java代码:
查看复制到剪贴板打印
message.properties
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”就行,然后重新启动服务器,再次运行,看看效果此时的输出应该是:
java代码:
查看复制到剪贴板打印
labela = labela in zh_CN
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4086.html】
欢迎访问http://sishuok.com获取更多内容
相关文章推荐
- Java中读取属性文件以及做资源国际化
- 3.10.5: Struts2的国际化---加载资源文件的顺序
- 使用ResourceBundle国际化资源文件读取properties详解
- java util工具读取国际化资源文件
- java.util.ResourceBundle 读取国际化资源或配置文件
- struts中国际化之读取资源文件
- spring和java国际化资源文件加载顺序
- 关于用<fmt:message>标签读取springmvc配置的国际化资源文件显示为???key???的错误原因
- struts 国际化:资源文件访问顺序
- Spring 读取i18n国际化资源文件的工具类
- Struts2中加载国际化资源文件的顺序
- struts 2.0 国际化寻找资源文件的顺序
- 国际化资源文件的配置与读取
- SSM项目-医药采购-04 国际化读取资源文件
- 在.NET中读取嵌入和使用资源文件的方法
- Java或者JAR包获取读取资源文件的路径的问题总结
- SystemProperties读取资源文件.properties文件的配置属性
- 从资源文件里加载文件或读取资源(C#)
- 读取文件资源
- Spring MVC中,通过Java代码读取资源文件时,发生乱码的解决方法