JavaEE复习笔记(9)——Struts:国际化

本文详细介绍了Struts2框架中的国际化实现方式,包括如何配置全局国际化资源文件、使用标签访问消息、填充占位符等,并解释了Struts2加载资源文件的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Struts2的国际化建立在Java国际化的基础之上。

2、通过配置struts.custom.i18n.resources常量来加载全局国际化资源文件,该常量值为全局国际化资源文件的baseName

3、Struts2访问国际化消息主要有如下三种方式:

·为了在JSP页面中输出国际化消息,可以使用Struts2的<s:text.../>标签,该标签可以指定一个name属性,该属性指定了国际化文件中的key

·为了在Action中访问国际化消息,可以使用ActionSupport类中的getText方法,该方法可以接受一个name参数,该参数指定了国际化资源的key

·为了在表单中的Label元素中输出国际化消息,可以为该表单标标签指定一个key属性,该key指定了国际化资源文件中的key

4、国际化资源文件应该放在Web应用的类加载路径下,即WEB-INF/classes路径下。

5、通常,国际化资源文件以key-value的形式存储,例如,文件:mess_en_US.properties的内容如下:

loginPage=Login Page

errorPage=Error Page

...

文件:mess_zh_CN.properties的内容如下:

loginPage=登录页面

errorPage=错误页面

succPage=成功页面

...

6、加载国际化资源后,当用户访问页面时,系统会根据用户所在的Locale来加载对应的语言资源文件。

7、Struts2中提供了两种方式来填充消息字符串中的占位符:

·如果需要在JSP页面中填充国际化消息中的占位符,则可以通过在<s:text .../>标签中使用多个<s:param .../>标签来填充消息中的占位符。

<s:text name=welcomeMsg>

<s:param><s:property value=username/></s:param>

<s:param>${d}</s:param>

</s:text>

·如果需要在Action中填充国际化消息里的占位符,则可以通过调用getText方法时使用getText(String aTextName, List args)getText(String key, String[] args)方法来填充占位符。该方法的第二个参数既可以是一个字符串数组,也可以是一个字符串组成的List对象,从而完成占位符的填充。

public String execute() throws Exception {

ActionContext ctx = ActionContext.getContext();

...

ctx.put(tip,

getText(succTip,

new String[] {getUsername()}));

}

8、Struts2提供了一种对占位符的替换方式,这种方式直接允许国际化消息中使用表达式,这种方式可以避免在使用国际化消息时需要为占位符传入参数值。

failTip = ${username}, Sorry you cant log in!

succTip = ${username}, welcome, you have logged in!

welcomeMsg = ${username}, Hello now is {0}

9、Struts加载国际化资源文件的方式:

·包范围资源文件:Struts2允许针对不同模块、不同Action来组织国际化资源文件,在包路径下建立名为:package_language_country.properties的国际化资源文件后,应用中处于该包下的所有Action都可以访问该资源文件。

·Action范围资源文件:Struts2允许为Action单独指定一份国际化资源文件。在Action所在路径建立名为:ActionName_language_country.properties的文件后,此资源文件只能由该Action访问。

·临时指定资源文件:可以在JSP页面中输出国际化消息时临时指定国际化资源的位置。在这种方式下,需要借助Struts2的另外一个标签:<s:i18n .../>。如果把<s:i18n .../>标签作为<s:text .../>的父标签,则<s:text .../>标签将会直接加载<s:i18n .../>标签里指定的国际化资源文件;如果把<s:i18n .../>标签当成表单标签的父标签,则表单标签的key属性将会从国际化资源文件中加载该信息。

10、Struts2加载资源文件的顺序:

·Action访问:

① 优先加载系统中保存在Action类文件相同位置,且baseNameActionName的系列资源文件。

② 如果①中找不到key对应的信息,且当前Action有父类ParentAction,则在系统中查找保存在ParentAction类文件相同位置,且baseName为ParentAction的系列资源文件。

③ 如果在②中找不到key对应的信息,且当前Action有实现接口IAction,则加载系统中保存在IAction的类文件相同位置,且baseNameIAction的系列资源文件。

④ 如果在③中找不到key对应的信息,且当前Action有实现接口ModelDriven,则对于getModel()方法返回的model对象,执行第①步操作。

⑤ 如果在④中找不到key对应的信息,则查找当前包下baseNamepackage的系列资源文件。

⑥ 如果在⑤中找不到key对应的信息,则沿着当前包上溯,直到最顶层包来查找指定baseNamepackage的系列资源文件。

⑦ 如果在⑥中找不到key对应的消息,则查找struts.custom.i18n.resources常量指定的baseName的系列资源文件。

⑧ 如果经过上面的步骤一直找不到该key对应的信息,则直接输出key的字符串值;如果上面的①~⑦的任一步中,找到了指定key的信息,系统停止搜索,直接输出key对应的消息。

·JSP访问:

1) 对于使用<s:i18n .../>标签作为父标签的情况:

① 从<s:i18n .../>标签指定的国际化资源文件中加载指定key对应的消息。

② 如果在①中找不到指定key对应的信息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。

③ 如果经过上面的步骤找不到key对应的信息,则直接输出key对应的字符串值。

2) 对于未使用<s:i18n .../>标签的情况:

直接加载struts.custom.i18n.resources常量指定的资源文件。如果找不到key对应的消息,直接输出该key的字符串值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值