zoukankan      html  css  js  c++  java
  • 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.     
    3. <s:text name="labela"/>    
    4. <hr>    
    5. <s:i18n name="message">    
    6.     <s:text name="labela"/>    
    7. </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 
  • 相关阅读:
    angular 复选框回选
    $parse
    AngularJS 指令的 Scope (作用域)
    文献解读 (1)
    献给初学者:常用的细胞凋亡检测方法
    KofamKOALA
    Dfam.h5.gz下载
    Augustus-3.3.3安装
    bamtools 2.5.1安装
    R语言从原点开始作图
  • 原文地址:https://www.cnblogs.com/langtianya/p/4708244.html
Copyright © 2011-2022 走看看