struts2 访问国际化资源 <s:text>作为属性

保留全局级国际化信息资源文件。并在message.properteis中增加一个带有参数的国际化信息。

Java代码  

  1. labela = labela in zh_CN
  2. labelb = labelb,{0}

<s:text>访问国际化信息 
用<s:text>标签来访问国际化信息,只需要在它的name属性上填入需要的key即可。下面,来看看它的其它的属性。 
1:使用带参数的国际化信息 
       可以用参数把一些可变值传给国际化信息,在<s:text>标签访问国际化信息的时候,只需要配合上<s:param>子标签即可传入参数,示例如下:

Java代码  

  1. <%@ taglib prefix="s" uri="/struts-tags" %>
  2. <s:text name="labela"/>
  3. <hr>
  4. <s:text name="labelb">
  5. <s:param>ok</s:param>
  6. </s:text>

上面的示例中,key为labela的国际化信息没有参数,因此<s:text>标签直接结束,没有子标签;而key为labelb的国际化信息有参数,因此<s:text>标签用<s:param>子标签来传入参数值ok。在运行的时候,参数{0}被替换为ok

2:指定国际化信息来源 
再来添加一个国际化信息来源。比如,恢复包级国际化信息资源文件,也就是package_zh_CN.properties文件,内容如下:

Java代码  

  1. 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代码  

  1. <%@ taglib prefix="s" uri="/struts-tags" %>
  2. <s:text name="labela"/>
  3. <hr>
  4. <s:i18n name="message">
  5. <s:text name="labela"/>
  6. </s:i18n>

解释一下如何引用国际化信息资源,仍然分为三种情况讨论: 
全局级国际化信息资源:直接用文件前缀名即可—message。 
包级国际化信息资源:用这个包的全限定名+package—cn.javass.i18n.package。 
类级国际化信息资源:用这个类的全限定名—cn.javass. i18n.I18NAction。 
上面的示例中,第一个<s:text>标签没有作为<s:i18n>的标签子标签出现,则它访问包级国际化信息资源;而第二个<s:text>标签作为<s:i18n>标签的子标签出现,则它访问<s:i18n>标签中指定的message国际化信息资源

Java代码  

  1. <%@ taglib prefix="s" uri="/struts-tags" %>
  2. <s:form>
  3. <s:textfield name="name1" label="labela"/>
  4. </s:form>

它采用<s:form>的默认主题(xhtml)建立了一个一行一列的表单,其中,<s:textfield>标签的label属性用于在文本框前生成这个文本框的说明,label属性就是简单的把它的值“labela”放在了文本框前。 
       现在只需要做个小小的改动,就可以访问国际化的信息了,简单的把label属性改为key属性,就可以访问国际化信息来显示文本框前的说明信息了,示例如下:

Java代码  

  1. <%@ taglib prefix="s" uri="/struts-tags" %>
  2. <s:form>
  3. <s:textfield name="name1" key="labela"/>
  4. </s:form>

与<s:textfield>类似,s标签中的其他可见表单域标签也都支持使用key属性来访问国际化信息,包括:<s:label/>、<s:textarea/>、<s:password/>、<s:submit/>等等,这里就不再去列举了。 
使用表单标签还有两个问题: 
表单标签在访问国际化信息的时候,不能使用<s:param>标签指定参数值。 
表单标签也可以使用<s:i18n>标签来指定国际化信息来源,代码示例如下:

Java代码  

  1. <%@ taglib prefix="s" uri="/struts-tags" %>
  2. <s:form>
  3. <s:textfield name="name1" key="labela"/>
  4. </s:form>
  5. <hr>
  6. <s:i18n name="message">
  7. <s:form>
  8. <s:textfield name="name1" key="labela"/>
  9. </s:form>
  10. </s:i18n>

可以看到,第一个仍访问默认的国际化信息来源,而第二个则指定了名称为message的全局级国际化信息。

在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代码  

  1. public class I18NAction  extends ActionSupport{
  2. public String execute() throws Exception {
  3. System.out.println(this.getText("labela"));
  4. System.out.println(this.getText("labelb",null,"ok"));
  5. ResourceBundle bundle = this.getTexts("message");
  6. System.out.println(bundle.getString("labela"));
  7. return SUCCESS;
  8. }
  9. }

在上例中,第一句访问默认的国际化信息,第二句访问默认的国际化信息并传入参数值为ok,第三句访问名为message的全局国际化信息。访问这个Action,运行的结果是

引用

labela in zh_CN with package  
labelb,ok  
labela in zh_CN

原文:http://pv-love.iteye.com/blog/1816843

时间: 2024-08-24 00:28:19

struts2 访问国际化资源 <s:text>作为属性的相关文章

struts2访问国际化消息的四种方式

Struts2的国际化是建立在java国际化的基础之上的,因此具有强大的国际互能力.Struts2运行时自动检测当前的 Location,然后使用RsourceBundle加载对应的Locale资源文件.因为Struts2对java的国际化进行了封装,因此国际化起来更简单,用户一般提供不同国家的消息资源即可.在Struts2的国际化包含三个部分:前台的国际化,Action中的国际化,验证配置文件的国际化. 在Struts2中加载全局资源文件 国际化的前提是如何让Struts2能够加载到国际化消息

struts2 访问或添加request/session/application属性

第一种方法: ActionContext ctx = ActionContext.getContext(); ctx.put("r1", list);//向request中添加属性 ctx.getSession().put("s1",list);//向session中添加属性 ctx.getApplication().put("a1", list);//向application中添加属性 HttpSession session =null; se

struts2访问web资源

通过ActionContext访问 public class TestActionContextAction { public String execute(){ //获取 ActionContext 对象 ActionContext actionContext = ActionContext.getContext(); //application Map<String, Object> applicationMap = actionContext.getApplication(); appl

Struts2框架使用(八)之struts2的国际化

国际化(Internationlization),通俗地讲,就是让软件实现对多种语言的支持: 想要软件国际化需要设置配置文件,例如: 首先创建一个mrlv.properties文件,这个文件是默认使用的语言.编写所需要国际化的字段: 这里的value是Unicode编码.{0}是一个可变参数. mrlv.properties userName=\u7528\u6237\u5040d password=\u5bc6\u7801 login=\u767b\u5f55 welcomeInfo=\u6b

Struts2的国际化(一)-国际化资源文件的配置及国际化信息的访问

一.概述: 1)国际化是一种技术:在程序设计领域,把在无需改写源代码即可让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化. 2)本地化是一个动作:与国际化对应的是本地化,指让一个具备国际化支持的应用程序支持某个特定的地区. 3)Struts2 国际化是建立在 Java 国际化基础上的: >为不同国家/语言提供对应的消息资源文件 >Struts2 框架会根据请求中包含的Locale 加载对应的资源文件 >通过程序代码取得该资源文件中指定 key 对应的消息 二.如何配置国际化

Struts2的国际化入门

Struts2的国际化入门 Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同,只是Struts2框架对JAVA程序国际化进行了进一步封装,从而简化了应用程序的国际化. Struts2需要国际化的部分 a.类型转换: b.数据校验: c.验证框架xml配置文件的国际化:RegisterAction-

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

Struts2(四):在Action中如何访问Web资源

1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生ServletAPI. 2.在Struts2中为什么要访问WEB资源? B/S应用中的Controller必然会有场景需要访问WEB资源:向域对象中读写属性,读取Cookie,获取realPath等. 3.在Struts2中如何访问WEB资源? a)和ServletAPI解耦的方式:只能有限的ServletAP

Struts2的国际化(二)-利用超链接实现动态加载国际化资源文件

原理:程序是根据Locale来确定国际化资源文件,因此关键之处在于知道 Struts2 框架是如何确定 Local 对象的 ! 由于Struts2 使用 i18n 拦截器处理国际化,并且将其注册在默认的拦截器中,因此,可以通过阅读 I18N 拦截器知道. 具体确定 Locale 对象的过程: > Struts2 使用 i18n 拦截器 处理国际化,并且将其注册在默认的拦截器栈中 > i18n拦截器在执行Action方法前,自动查找请求中一个名为 request_locale 的参数. 如果该参