`
PV_love
  • 浏览: 29641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
保留全局级国际化信息资源文件。并在message.properteis中增加一个带有参数的国际化信息。
labela = labela in zh_CN  
labelb = labelb,{0}


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

<%@ 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

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

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修改如下:

<%@ 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国际化信息资源

<%@ 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属性,就可以访问国际化信息来显示文本框前的说明信息了,示例如下:

<%@ 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>标签来指定国际化信息来源,代码示例如下:

<%@ 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的全局级国际化信息。

在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方法中访问国际化信息,示例如下:


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,运行的结果是


引用
labela in zh_CN with package 
labelb,ok 
labela in zh_CN 

分享到:
评论

相关推荐

    struts2 <s:if>标签使用

    struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用struts2 &lt;s:if&gt;标签使用

    struts2<s:if>使用心得

    taskInstanceId=&lt;s:property value="id"/&gt;" &gt;我来处理&lt;/a&gt;)&lt;/s:if&gt; &lt;s:elseif test='{#taskName == "受评对象准备评级资料"}'&gt; &lt;a href="${pageContext.request.contextPath}/ga/needModify.action?...

    struts标签(如<html:form>)

    关于STRUTS标签的一些详细说明。 如:&lt;html:form&gt;的说明。

    <S:select>用法

    Address private int aid; private String aname; public int getAid() { return aid; } public void setAid(int aid) { ...private List&lt;Address&gt; lis = new ArrayList&lt;Address&gt;();... &lt;/s:form&gt;

    Struts2标签库

    &lt;%@ taglib uri="/struts-tags" prefix="s" %&gt; 结合例子,重点掌握以下标签的用法 (1) &lt;s:property&gt; (2) &lt;s:set&gt; (3) &lt;s:if&gt; 、&lt;s:elseif&gt;、&lt;s:else&gt; (4) &lt;s:iterator&gt; (5) &lt;s:include&gt; (6) &lt;s:form&gt;、&lt;s:hidden&gt; (7...

    Struts2标签库的所有

    &lt;%@ taglib uri="/struts-tags" prefix="s" %&gt; 结合例子,重点掌握以下标签的用法 (1) &lt;s:property&gt; (2) &lt;s:set&gt; (3) &lt;s:if&gt; 、&lt;s:elseif&gt;、&lt;s:else&gt; (4) &lt;s:iterator&gt; (5) &lt;s:include&gt; (6) &lt;s:form&gt;、&lt;s:hidden&gt; (7...

    Struts2中使用标签实现组合查询和带分页的例子

    NULL 博文链接:https://z18022893621.iteye.com/blog/1956098

    struts2 标签库 帮助文档

    3. &lt;s:text name=""&gt;&lt;/s:text&gt;-----I18n文本信息 4. &lt;s:textarea&gt;&lt;/s:textarea&gt;-----文本域输入框 5. &lt;s:textfield&gt;&lt;/s:textfield&gt;-----文本输入框 6. &lt;s:token&gt;&lt;/s:token&gt;-----拦截器 7. &lt;s:tree&gt;&lt;/s:tree&gt;----...

    struts2 OGNL之&lt;s:property&gt;标签访问值栈(value stack)用法

    struts2 OGNL之&lt;s:property&gt;标签访问值栈(value stack)用法,希望能对大家有帮助

    Struts2入门基础

    2) 作为表单控件的属性输出 &lt;s:textfield name="name" key="label.helloWorld"/&gt; &lt;s:textfield name="name" label="%{getText('label.helloWorld')}"/&gt; 显示一个文本框,文本框的标题进行国际化 3) 使用&lt;s:i18n&gt;...

    struts与jsp 使用方法

    在action里面写了方法获取一个list,再将这个list的值放到jsp页面中显示出来,用的是&lt;s:iterator&gt;标签。

    Struts 1.XX <html:file>的使用

    NULL 博文链接:https://12345678.iteye.com/blog/713954

    struts2标签大全

    &lt;s:checkbox&gt;&lt;/s:checkbox&gt;-----复选框 &lt;s:checkboxlist list=""&gt;&lt;/s:checkboxlist&gt;-----多选框 &lt;s:combobox list=""&gt;&lt;/s:combobox&gt;-----下拉框 &lt;s:component&gt;&lt;/s:component&gt;-----图像符号 D: &lt;s:date/&gt;-----获取...

    struts 2 s标签 struts 2 s标签

    struts 2 s标签 a标签创建一个HTML超链接,等价于HTML 的&lt;a href="".... 示范代码: &lt;s:a href="login.action"&gt;登陆&lt;/s:a&gt;

    struts2文件上传下载

    struts2文件上传与下载, &lt;s:form name="Myform" action="/fileManage/upload" method="post" enctype="multipart/form-data" theme="simple" &gt; &lt;s:fielderror&gt;&lt;/s:fielderror&gt; &lt;s:file name="image" label=...

    struts2标签技术

    &lt;s:property /&gt;&lt;br/&gt; &lt;/s:iterator&gt; &lt;/s:generator&gt; 例2: 生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。 Generate an iterator with count ...

    Struts2标签 s:if test 判断String类型的对象属性值和单字符是否相等的问题

    &lt;s:if&gt; 在进行字符创和字符比较时,会忽略一些细节,对于对该控件不是经常使用的,需要注意与字符和字符串的比较的区别

    struts2的标签库

    这是一份关于struts2...&lt;s:if&gt;:拥有一个test属性,其表达式的值用来决定标签里内容是否显示。&lt;s:if test="#request.username=='hzd'"&gt;欢迎hzd&lt;/s:if&gt; &lt;s:elseif&gt;:同上。 &lt;s:else&gt; …… …… 很实用的,就是简洁明了

    Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)

    NULL 博文链接:https://takeme.iteye.com/blog/1663039

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    7.4、设置属性:&lt;jsp:setProperty&gt; 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性:&lt;jsp:getProperty&gt; 7.6、JavaBean的保存范围 7.6.1、page范围的JavaBean ...

Global site tag (gtag.js) - Google Analytics