struts2是怎么读取properties的资源文件Word格式文档下载.docx
- 文档编号:1394561
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:14
- 大小:96.13KB
struts2是怎么读取properties的资源文件Word格式文档下载.docx
《struts2是怎么读取properties的资源文件Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《struts2是怎么读取properties的资源文件Word格式文档下载.docx(14页珍藏版)》请在冰点文库上搜索。
3,根据不同的需要在不同的地方读取资源文件的方式:
(1)在JSP界面上读取:
在界面上读取是比较简单的,我们有三种方式可以读取:
<
1>
使用2.0标签//name="
建的名字"
2>
2.getText方式
h2>
s:
propertyvalue="
%{getText('
text.createRing'
)}"
/>
/<
SPAN>
在JSP上面可以直接读到
property
value="
getText('
)"
3>
3.被validator的配置文件引用key。
例如在RingManage-validation.xml中的
message
key="
invalid.ringName"
>
message>
如果在name中以%{...}包裹一个名字,则会先在value-stack中进行ongl转换,然后再去资源文件中获取文本。
(2)在普通的JAVA类和Action中读取资源文件:
让你的JAVA类或者是ACTION继承ActionSupport,通过里面的getText("
建名"
)来取值,可能有一些朋友这么做了,可是偏骗就是从全局资源文件中取不到值,一开始我也是这样,后来找到了解决的办法,我想可能是在2.0中普通的java类和ACTION根本就没有办法读取到全局的资源文件中的值.后来我看到了下面的那些话后决定使用局部的资源文件.
假设我们在某个ChildAction中调用了getText("
user.title"
),Struts2.0的将会执行以下的操作:
1.查找ChildAction_xx_XX.properties文件或ChildAction.properties;
2.查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
3.查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
4.判断当前ChildAction是否实现接口ModelDriven。
如果是,调用getModel()获得对象,查找与其同名的资源文件;
5.查找当前包下的package.properties文件;
6.查找当前包的父包,直到最顶层包;
7.在值栈(ValueStack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
8.查找在struts.properties配置的默认的资源文件,参考例1;
9.输出user.title。
所以后来我看到这些之后明白,当在一个JAVA类或者是ACTION里面使用getText的时候它会首先去找到与ACTION或者是与JAVA类同名的资源文件,所以我在同一包下面建立了相同名称的资源文件.后来经过getText的测试通过了.截止到现在,struts2.0的资源文件的读取,终于成功了.
回头想想可真不容易啊,从8点开始琢磨,一直琢磨到下一点多,真是得来不易,从这次的事件中,我明白了,人一定要有耐心,和恒心还有坚定不移的决心,只有这样,我们才能在IT界中打出一块属于我们自己的领地.太晚了,明天还有正课.得赶紧睡觉了,明天是hibernate框架.
参考================================================================================================
在Struts2.0中国际化您的应用程
来自:
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。
其实,Struts1.x在此部分已经做得相当不错了。
它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<
bean:
标志输出即可。
不过,所谓“没有最好,只有更好”。
Struts2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。
国际化HelloWorld
下面让我们看一个例子——HelloWorld。
这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。
1.在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《为Struts2.0做好准备》)。
2.在src文件夹中加入struts.properties文件,内容如下:
struts.custom.i18n.resources=globalMessages
Struts2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
ostruts.xml用于应用程序相关的配置
ostruts.properties用于Struts2.0的运行时(Runtime)的配置
3.在src文件夹中加入globalMessages_en_US.properties文件,内容如下:
HelloWorld=HelloWorld!
4.在src文件夹中加入globalMessages_zh_CN.properties文件,内容如下:
HelloWorld=你好,世界!
在此想和大家分享一个不错的编写properties文件的Eclipse插件(plugin),有了它我们在编辑一些简体中文、繁体中文等Unicode文本时,就不必再使用native2ascii编码了。
您可以通过Eclipse中的软件升级(SoftwareUpdate)安装此插件,步骤如下:
5.在WebContent文件夹下加入HelloWorl.jsp文件,内容如下:
%@page
contentType="
text/html;
charset=UTF-8"
%>
%@taglibprefix="
s"
uri="
/struts-tags"
html>
head>
title>
HelloWorld<
/title>
/head>
body>
text
name="
HelloWorld"
/h2>
%{getText('
HelloWorld'
/body>
/html>
6.发布运行应用程序,在浏览器地址栏中输入http:
//localhost:
8080/Struts2_i18n/HelloWorld.jsp
,出现图1所示页面。
图1中文输出
7.将浏览器的默认语言改为“英语(美国)”,刷新页面,出现图2所示页面。
图2英文输出
上面的例子的做法,与Struts1.x的做法相似,似乎并不能体现Struts2.0的优势。
不过,我在上面的例子用了两种方法来显示国际化字符串,其输出是相同的。
其实,这就是Struts2.0的一个优势,因为它默认支持EL,所示我们可以用getText方法来简洁地取得国际化字符串。
另外更普遍的情况——在使用UI表单标志时,getText可以用来设置label属性,例如:
textfield
name"
label="
UserName'
资源文件查找顺序
之所以说Struts2.0的国际化更灵活是因为它可以能根据不同需要配置和获取资源(properties)文件。
在Struts2.0中有下面几种方法:
1.使用全局的资源文件,方法如上例所示。
这适用于遍布于整个应用程序的国际化字符串,它们在不同的包(package)中被引用,如一些比较共用的出错提示;
2.使用包范围内的资源文件。
做法是在包的根目录下新建名的package.properties和package_xx_XX.properties文件。
这就适用于在包中不同类访问的资源;
3.使用Action范围的资源文件。
做法为Action的包下新建文件名(除文件扩展名外)与Action类名同样的资源文件。
它只能在该Action中访问。
如此一来,我们就可以在不同的Action里使用相同的properties名表示不同的值。
例如,在ActonOne中title为“动作一”,而同样用title在ActionTwo表示“动作二”,节省一些命名工夫;
4.使用<
i18n>
标志访问特定路径的properties文件。
使用方法请参考我早前的文章《常用的Struts2.0的标志(Tag)介绍》。
在您使用这一方法时,请注意<
标志的范围。
在<
i18nname="
xxxxx"
到<
/s:
之间,所有的国际化字符串都会在名为xxxxx资源文件查找,如果找不到,Struts2.0就会输出默认值(国际化字符串的名字)。
上面我列举了四种配置和访问资源的方法,它们的范围分别是从大到小,而Struts2.0在查找国际化字符串所遵循的是特定的顺序,如图3所示:
图3资源文件查找顺序图
参数化国际化字符串
许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。
在Struts2.0中,我们通过以下两种方法做到这点:
1.在资源文件的国际化字符串中使用OGNL,格式为,例如:
validation.require=${getText(fileName)}isrequired
2.使用java.text.MessageFormat中的字符串格式,格式为{参数序号(从0开始),格式类形(number|date|time|choice),格式样式},例如:
validation.between=Datemustbetween{0,
date,short}and{1,
date,short}
在显示这些国际化字符时,同样有两种方法设置参数的值:
1.使用标志的value0、value1...valueN的属性,如:
validation.required"
value0="
UserName"
2.使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,例如:
param
text>
让用户方便地选择语言
开发国际化的应用程序时,有一个功能是必不可少的——让用户快捷地选择或切换语言。
在Struts2.0中,通过ActionContext.getContext().setLocale(Localearg)可以设置用户的默认语言。
不过,由于这是一个比较普遍的应用场景(Scenario),所以Struts2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptorchain)中。
它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"
request_locale"
的参数。
如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。
下面,我将提供一完整示例演示它的使用方法。
package
tutorial;
import
java.util.Hashtable;
java.util.Locale;
java.util.Map;
publicclass
Locales
{
public
Map<
String,Locale>
getLocales()
locales
=new
Hashtable<
(2);
locales.put("
AmericanEnglish"
Locale.US);
SimplifiedChinese"
Locale.CHINA);
return
locales;
}
tutorial/Locales.java
script
type="
text/javascript"
!
--
function
langSelecter_onChanged(){
document.langForm.submit();
}
//-->
/script>
set
SESSION_LOCALE"
#session['
WW_TRANS_I18N_LOCALE'
]"
bean
id="
locales"
tutorial.Locales"
form
action="
urlincludeParams="
get"
encode="
true"
"
name="
langForm"
style="
background-color:
powderblue;
padding-top:
4px;
padding-bottom:
Language:
select
Language"
list="
#locales.locales"
listKey="
value"
listValue="
key"
value="
#SESSION_LOCALE==null?
locale:
#SESSION_LOCALE"
langSelecter"
onchange="
langSelecter_onChanged()"
theme="
simple"
/form>
LangSelector.jsp
上述代码的原理为,LangSelector.jsp先实例化一个Locales对象,并把对象的Map类型的属性locales赋予下拉列表(select)。
如此一来,下拉列表就获得可用语言的列表。
大家看到LangSelector有<
form>
标志和一段Javascript脚本,它们的作用就是在用户在下拉列表中选择了后,提交包含“reqeust_locale”变量的表单到Action。
在打开页面时,为了下拉列表的选中的当前区域,我们需要到session取得当前区域(键为“WW_TRANS_I18N_LOCALE”的属性),而该属性在没有设置语言前是为空的,所以通过值栈中locale属性来取得当前区域(用户浏览器所设置的语言)。
你可以把LangSelector.jsp作为一个控件使用,方法是在JSP页面中把它包含进来,代码如下所示:
include
/LangSelector.jsp"
在例1中的HellloWorld.jsp中<
后加入上述代码,并在struts.xml中新建Action,代码如下:
action
result>
/HelloWorld.jsp<
/result>
/action>
或者,如果你多个JSP需要实现上述功能,你可以使用下面的通用配置,而不是为每一个JSP页面都新建一个Action。
*"
/{1}.jsp<
分布运行程序,在浏览器的地址栏中输入http:
8080/Struts2_i18n/HelloWorld.action,出现图4所示页面:
ion"
src="
图3HelloWorld.action
在下拉列表中,选择“AmericanEnglish”,出现图5所示页面:
http:
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 怎么 读取 properties 资源 文件