怎么读取struts2.0的资源文件(转载)
说起这个真是够折磨人的,现在要开始做项目,决定使用struts2.0做,可是大部分都是自己遇习的,没办法就遇到了这个问题,经过本人长期的工作和不停的查看资料,终于攻克了这个难题,现在写在这里已供有同样问题的大家共享.一,在Eclipse创建工程配置开发和运行环境
要想读取资源文件必须要下载一个插件,这个插件的名字叫做:plugin,大家不用担心是可以通过Eclipse自己升级和下载的一个插件,所以不需要从网上下载.下面我把怎么配置这个插件的步骤告诉大家.
1、展开Eclipse的Help菜单,将鼠标移到Software Update子项,在出现的子菜单中点击Find and Install;
2、在Install/Update对话框中选择Search for new features to install,点击Next;
3、在Install对话框中点击New Remote Site;
4、在New Update Site对话框的Name填入“PropEdit”或其它任意非空字符串,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/;
5、在Site to include to search列表中,除上一步加入的site外的其它选项去掉,点击Finsih;
6、在弹出的Updates对话框中的Select the features to install列表中将所有结尾为“3.1.x”的选项去掉(适用于Eclipse 3.2版本的朋友);
7、点击Finish关闭对话框;
8、在下载后,同意安装,再按提示重启Eclipse,在工具条看到形似vi的按钮表示安装成功,插件可用。此时,Eclpise中所有properties文件的文件名前有绿色的P的图标作为标识。
二,开始配置资源文件:
相信通过步骤一之后,你的Eclipse已经能够使用扩展名为.properties的资源文件了,那怎么使用资源文件呢.
1.新建一个为名为struts.properties的资源文件,那么这个时候就出现了分类:
(1),如果向其中写入struts.custom.i18n.resources=globalMessages,那么同样建立在src目录下的globalMessages.properties或者globalMessages_zh_CN.properties,就成为全局资源文件,一般来说,全局文件一般放在src文件夹下。
(2)相反的来说,如果向struts.properties中写入struts.custom.i18n.resources=com.sanss.globalMessages的话,说明说明资源文件globalMessages位于com.sansspackage下面,又可定义RingManage.properties放到与class相同的目录。还可以将资源文件命名成package.properties,这样就可以写入到具体的包下面.
2.读取资源文件
假如说刚刚我们像struts2.0中写如的是全局的资源文件,那么现在我们建立一个名为:globalMessages_zh_CN.properties的资源文件,文件中可以直接写如建和值的对等关系,如:
invalid.ringName=请输入铃音名
text.createRing=创建铃音
format.date=格式化日期
都是可以的.
3,根据不同的需要在不同的地方读取资源文件的方式:
(1)在JSP界面上读取:
在界面上读取是比较简单的,我们有三种方式可以读取:
<1>使用2.0标签 //name="建的名字"
<2>2. getText方式
<h2><s:property value="%{getText('text.createRing')}"/></< SPAN>h2>在JSP上面可以直接读到
<s:property value="getText('text.createRing')"/>
<3>3.被validator的配置文件引用key。例如在RingManage-validation.xml中的
<message key="invalid.ringName"></< SPAN>message>
如果在name中以%{...}包裹一个名字,则会先在value-stack中进行ongl转换,然后再去资源文件中获取文本。
(2) 在普通的JAVA类和Action中读取资源文件:
<1>让你的JAVA类或者是ACTION继承ActionSupport,通过里面的getText("建名")来取值,可能有一些朋友这么做了,可是偏骗就是从全局资源文件中取不到值,一开始我也是这样,后来找到了解决的办法,我想可能是在2.0中普通的java类和ACTION根本就没有办法读取到全局的资源文件中的值.后来我看到了下面的那些话后决定使用局部的资源文件.
假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:
[*]查找ChildAction_xx_XX.properties文件或ChildAction.properties;
[*]查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
[*]查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
[*]判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
[*]查找当前包下的package.properties文件;
[*]查找当前包的父包,直到最顶层包;
[*]在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
[*]查找在struts.properties配置的默认的资源文件,参考例1;
[*]输出user.title。
所以后来我看到这些之后明白,当在一个JAVA类或者是ACTION里面使用getText的时候它会首先去找到与ACTION或者是与JAVA类同名的资源文件,所以我在同一包下面建立了相同名称的资源文件.后来经过getText的测试通过了.截止到现在,struts2.0的资源文件的读取,终于成功了.
回头想想可真不容易啊,从8点开始琢磨,一直琢磨到下一点多,真是得来不易,从这次的事件中,我明白了,人一定要有耐心,和恒心还有坚定不移的决心,只有这样,我们才能在IT界中打出一块属于我们自己的领地.太晚了,明天还有正课.得赶紧睡觉了,明天是hibernate框架.
参考================================================================================================
在Struts 2.0中国际化您的应用程
来自:
http://www.blogjava.net/max/archive/2006/11/01/78536.html
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。
其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。
不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。
国际化Hello World
页:
[1]