零基础学Struts
上QQ阅读APP看书,第一时间看更新

8.3 Action中访问国际化资源文件

Struts 2中的Action可以通过3种方式来加载资源文件,包括指定全局资源文件、包范围资源文件、Action范围资源文件。并且对于不同范围的资源文件,加载顺序也不同。

8.3.1 全局资源文件

Action中访问的资源文件分为3种:全局资源文件、包范围资源文件、Action范围资源文件。

下面使用Action访问全局资源文件,首先新建两个全局资源文件。

❑ 第一个资源文件:message_en_US.properties。

        message = hello beijing

❑ 第二个资源文件:message_zh_CN.properties。

        message = \u4F60\u597D, \u5317\u4EAC

使用native2ascii命令来处理转换成Unicode编码。

        message =你好,北京

新建Action,在该Action中通过getText()方法来取得国际化信息。并将取得的信息设置到request范围中,代码如下所示。

        package net.hncu.struts2.action;
        import org.apache.struts2.ServletActionContext;
        import com.opensymphony.xwork2.ActionSupport;
        public class ShowAction extends ActionSupport {
              public String execute() throws Exception {
                    //取得国际化信息
                    String message = getText("message");
                    //将信息设置到request属性中
                    ServletActionContext.getRequest().setAttribute("message", message);
                    return SUCCESS;
              }
        }

在“struts.xml”文件中部署该Action,指定如果Action返回success,页面将跳转到showMessage. jsp消息输出页,代码如下所示。

        <! -- struts为配置文件根元素-->
        <struts>
              <! -- 定义资源文件baseName -->
              <constant name="struts.custom.i18n.resources" value="message"></constant>
              <package name="struts2" extends="struts-default">
                    <! -- 定义showAction,其实现类为net.hncu.struts2.action.ShowAction-->
                    <action name="show" class="net.hncu.struts2.action.ShowAction">
                          <! -- 定义处理结果与视图资源之间的关系-->
                          <result name="success">/showMessage.jsp</result>
                    </action>
              </package>
        </struts>

新建消息输出页“showMessage.jsp”,使用EL表达式输出request属性范围中的message值,代码如下所示。

        <%@ page language="java" pageEncoding="gb2312"%>
        <%@ taglib prefix="s" uri="/struts-tags"%>
        <html>
              <head>
                  <title>Action中国际化</title>
              </head>
              <body>
                  <center>
                        ${message}
                  </center>
              </body>
        </html>

打开浏览器,输入Web项目名加上show.action,页面跳转到消息输出页显示中文的欢迎信息,如图8.8所示。

修改浏览器的语言环境,设置其语言环境为美国英语。刷新该页面,页面输出英文的欢迎信息,如图8.9所示。

图8.8 页面输出中文的欢迎信息

图8.9 页面输出英文的欢迎信息

8.3.2 包范围资源文件

下面来介绍包范围资源文件,包资源文件的好处在于不需要在“struts.xml”文件中配置,而且可以将资源文件归类,不同包下的Action使用不同的包资源文件。包范围资源文件可以被该包下的所有Action访问。

下面使用Action访问全局资源文件,首先新建两个包范围资源文件,包范围资源文件的文件名为package_language_country.properties,保存目录为该包的根目录。

❑ 第一个资源文件:package_en_US.properties。

        message = package:hello beijing

❑ 第二个资源文件:package_zh_CN.properties。

        message = \u5305\u8303\u56F4\u8D44\u6E90\u6587\u4EF6:\u4F60\u597D, \u5317\u4EAC

使用native2ascii命令来处理转换成Unicode编码。

        message = 包范围资源文件:你好,北京

打开浏览器,输入Web项目名加上show.action,页面跳转到消息输出页显示中文的欢迎信息,如图8.10所示。

修改浏览器的语言环境,设置其语言环境为美国英语。刷新该页面,页面输出英文的欢迎信息,如图8.11所示。

图8.10 页面输出中文的欢迎信息

图8.11 页面输出英文的欢迎信息

8.3.3 Action范围资源文件

Struts 2还允许单独为Action指定一份国家化资源文件。Action范围的资源文件只能被该Action访问。下面新建两个Action范围资源文件,其文件名为ActionNamee_language_country.properties,文件保存到Action同目录下。

❑ 第一个资源文件:ShowAction_en_US.properties。

        message = Action:hello beijing

❑ 第二个资源文件:ShowAction_zh_CN.properties。

        message = Action\u8303\u56F4\u8D44\u6E90\u6587\u4EF6:\u4F60\u597D, \u5317\u4EAC

使用native2ascii命令来处理转换成Unicode编码。

        message = Action范围资源文件:你好,北京

打开浏览器,输入Web项目名加上show.action,页面跳转到消息输出页显示中文的欢迎信息,如图8.12所示。

修改浏览器的语言环境,设置其语言环境为美国英语。刷新该页面,页面输出英文的欢迎信息,如图8.13所示。

图8.12 页面输出中文的欢迎信息

图8.13 页面输出英文的欢迎信息

8.3.4 加载资源文件顺序

上面介绍了Action提供3种方式来加载国际化资源文件,从上面这个示例可以看出Action范围资源文件最先加载,然后是包范围资源文件,最后是全局资源文件。但是必须注意一点的是,如果在某一范围找到了指定key对应的信息,它将停止查找然后输出该key对应的信息。

假如在Action范围资源文件、包范围资源文件、全局资源文件中同时定义了相同的key以及value值,那么最终Action中取得的国际化信息为Action范围资源文件中key对应的value值。

下面来看资源文件加载顺序示意图,如图8.14所示。

图8.14 资源文件加载顺序示意图