9.5 Struts2访问国际化信息的不同方式
为了示例的简洁,删除在9.4节中添加的I18NAction_zh_CN.properties文件和package.properties文件,只保留全局级国际化信息资源文件。并在message.properteis中增加一个带有参数的国际化信息。
java代码:
- labela = labela in zh_CN
- labelb = labelb,{0}
注意:本节中的访问,都是在浏览器使用中文zh_CN的前提下访问的。
9.5.1用<s:text>访问国际化信息
在前面已经使用了<s:text>标签来访问国际化信息,只需要在它的name属性上填入需要的key即可。下面,来看看它的其它的属性。
1:使用带参数的国际化信息
可以用参数把一些可变值传给国际化信息,在<s:text>标签访问国际化信息的时候,只需要配合上<s:param>子标签即可传入参数,示例如下:
java代码:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:text name="labela"/>
- <hr>
- <s:text name="labelb">
- <s:param>ok</s:param>
- </s:text>
上面的示例中,key为labela的国际化信息没有参数,因此<s:text>标签直接结束,没有子标签;而key为labelb的国际化信息有参数,因此<s:text>标签用<s:param>子标签来传入参数值ok。在运行的时候,参数{0}被替换为ok,最终显示为:
图9.7 使用<s:param>子标签为<s:text>标签传递参数的结果
2:指定国际化信息来源
再来添加一个国际化信息来源。比如,恢复包级国际化信息资源文件,也就是package_zh_CN.properties文件,内容如下:
java代码:
- labela = labela in zh_CN with package
现在,同时存在全局级国际化信息资源和包级国际化信息资源,根据前面所学的知识,包级国际化信息资源会覆盖全局级国际化信息资源,因此,<s:text name=”labela”/>将会返回在package_zh_CN.properties中定义的labela = labela in zh_CN with package。
现在需要仍然显示全局级的国际化信息,该怎么办呢?
可以通过<s:i18n>标签,来为<s:text>标签指定国际化信息来源。如果<s:text>标签作为<s:i18n>标签的子标签出现,则会使用<s:i18n>指定的国际化信息来源。把jsp修改如下:
java代码:
- <%@ taglib prefix="s" uri="/struts-tags" %>
-
- <s:text name="labela"/>
- <hr>
- <s:i18n name="message">
- <s:text name="labela"/>
- </s:i18n>
解释一下如何引用国际化信息资源,仍然分为三种情况讨论:
- 全局级国际化信息资源:直接用文件前缀名即可—message。
- 包级国际化信息资源:用这个包的全限定名+package—cn.javass.i18n.package。
- 类级国际化信息资源:用这个类的全限定名—cn.javass. i18n.I18NAction。
上面的示例中,第一个<s:text>标签没有作为<s:i18n>的标签子标签出现,则它访问包级国际化信息资源;而第二个<s:text>标签作为<s:i18n>标签的子标签出现,则它访问<s:i18n>标签中指定的message国际化信息资源,最终显示为:
图9.8 使用<s:i18n>标签临时指定国际化信息来源的结果
9.5.2用表单标签访问国际化信息
在前面学过使用Struts的表单标签来建立一张表单,看看如下代码:
java代码:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:form>
- <s:textfield name="name1" label="labela"/>
- </s:form>
它采用<s:form>的默认主题(xhtml)建立了一个一行一列的表单,其中,<s:textfield>标签的label属性用于在文本框前生成这个文本框的说明,label属性就是简单的把它的值“labela”放在了文本框前。
现在只需要做个小小的改动,就可以访问国际化的信息了,简单的把label属性改为key属性,就可以访问国际化信息来显示文本框前的说明信息了,示例如下:
java代码:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:form>
- <s:textfield name="name1" key="labela"/>
- </s:form>
与<s:textfield>类似,s标签中的其他可见表单域标签也都支持使用key属性来访问国际化信息,包括:<s:label/>、<s:textarea/>、<s:password/>、<s:submit/>等等,这里就不再去列举了。
使用表单标签还有两个问题:
- 表单标签在访问国际化信息的时候,不能使用<s:param>标签指定参数值。
- 表单标签也可以使用<s:i18n>标签来指定国际化信息来源,代码示例如下:
java代码:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:form>
- <s:textfield name="name1" key="labela"/>
- </s:form>
- <hr>
- <s:i18n name="message">
- <s:form>
- <s:textfield name="name1" key="labela"/>
- </s:form>
- </s:i18n>
可以看到,第一个仍访问默认的国际化信息来源,而第二个则指定了名称为message的全局级国际化信息。最终显示为:
图9.9 使用<s:i18n>标签临时指定国际化信息来源的结果
9.5.3在Action中访问国际化信息
前面都是在页面上来访问国际化的信息,如果要在Action中访问国际化信息,该怎么办呢?
如果我们自己写的Action类继承自ActionSupport,就可以直接使用ActionSupport的一系列getText方法来访问国际化信息。这些方法声明于ActionSupport类实现的TextProvider接口。
分为三种情况讨论:
直接调用最简单的getText(String aTextName)即可,传入国际化信息的key,这个在前面讲ActionSupport的时候,就示例过这种情况。
调用可以设置参数的getText(String aTextName,String defaultValue,String… args),其中,第一个参数为国际化信息的key,第二个参数为找不到此key时返回的默认值,第三个String[]参数传入需要传给国际化信息的参数。
调用其getTexts(String aBundleName)可以返回一个ResourceBundle对象,可然后就可以自由操作此ResourcBundle对象。
比如,可以在execute方法中访问国际化信息,示例如下:
java代码:
- public class I18NAction extends ActionSupport{
- public String execute() throws Exception {
- System.out.println(this.getText("labela"));
- System.out.println(this.getText("labelb",null,"ok"));
- ResourceBundle bundle = this.getTexts("message");
- System.out.println(bundle.getString("labela"));
- return SUCCESS;
- }
- }
在上例中,第一句访问默认的国际化信息,第二句访问默认的国际化信息并传入参数值为ok,第三句访问名为message的全局国际化信息。访问这个Action,运行的结果是
java代码:
- labela in zh_CN with package
- labelb,ok
- labela in zh_CN
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4087.html】
欢迎访问http://sishuok.com获取更多内容
分享到:
相关推荐
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、模块化且易于管理的Web应用。这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中...
为了让应用程序能够适应不同的语言环境,Struts2提供了国际化支持。 #### 11.2 国际化实现 - **资源文件**:使用.properties文件来存放不同语言的文本。 - **切换语言**:可以通过设置locale参数来切换语言。 ###...
### Struts2 运行流程及核心概念解析 #### Struts2 概述与 MVC 模式 **Struts2** 是一个基于 **MVC(Model-View-Controller)** 设计模式的 Java Web 应用框架。它通过将应用程序分为模型、视图和控制器三个部分来...
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
从给定的文件信息来看,这是一份关于Struts2框架深入解析的系列文章,涵盖了Struts2的基础、架构、核心组件、高级特性等多个方面,旨在帮助读者全面掌握Struts2框架的应用与实践。以下是对该系列文章所涵盖的关键...
《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...
根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...
12. **其他重要知识**:Struts2还涉及国际化、异常处理、主题与皮肤、动态方法调用等多个高级主题,这些内容使得Struts2能够应对复杂的Web应用需求。 通过《研磨Struts2》,读者可以系统地学习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) ...
研磨设计模式.part2 一定要下载5部分
第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式...
Java工程师三大框架面试题.pdf