转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

尽管国际化不是重点内容,但是也有必要了解它的使用。在struts2中国际化有三种级别:分别是针对某个Action的action级别,针对package的package级别,针对webapp的webapp级别。下面我们建立struts2i18n项目来演示国际化在struts2中的使用。

 

1.action级别下的国际化

 

步骤一、首先是建立login.jsp及LoginAction,由于它们经常使用,在此省去它们的代码。
步骤二、建立资源文件,由于LoginAction在com.asm包中,所以我们应在com.asm包下我们建立两个资源文件:一个是中文LoginAction_zh_CN.properties、一个是英文LoginAction_en_US.properties。注意它们的名字相对固定,前面与Action的名字相同,后面是语言和国家代码。
英文资源文件内容如下:
login_page=login page

login_username=userName

login_password=password

login_sex=sex

login_male=male

login_female=female

login_submit=login

login_reset=reset

login_suc=Welcome {0}

中文资源文件,需要特别注意:我们应使用Myeclipse自带的MyEclipse properties Editer编辑器来打开此资源文件,并在properties视图下进行编辑,这样它会把中文进行编码(我们切换到source视图下可以看到经编码后的中文)。 这一步非常重要,否则会出现乱码。
步骤三,修改login.jsp中的内容:

(我的补充:action必须继承ActionSupport类,该类封装了对资源文件的访问,首先寻找类级配置文件,无果则向上寻找包级配置文件,无果则向上寻找再上一层的包级配置文件。

1访问继承了ActionSupport的action---2获取配置信息----3返回success并转向jsp页面---4在jsp中使用配置信息)
<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>

<html>

       <body>

       <s:text name="login_page"/><br>

       <s:label key="login_username"/>

              <s:form action="/login.action" method="post">        

              <!--

                     <s:textfield label="用户名" name="username" required="true" />

               -->

               <s:textfield label="%{getText('login_username')}" name="username" />

                      

               <!--

                     <s:password label="密码" name="password" required="true"/>

               -->

                      <s:password key="login_password" name="password" />

                      

               <!--

                     <s:radio list="#{1:'男',2:'女'}" value="1" label="性别" name="sex" />

               -->

               <s:radio list="#{1:getText('login_male'),2:getText('login_female')}" value="1" label="%{getText('login_sex')}" name="sex" />

              <s:submit  key="login_submit" /> <s:reset key="login_reset"/>

              </s:form>

       </body>

</html>

说明:对资源文件的引用,我们采取了两种方式:有的是通过在label中使用%{getText('资源文件中的key')}这样的形式,有的是通过key=资源文件中的key这种形式。需要注意在radio标签中list对资源文件的引用。另外需要注意:   

<s:text name="login_page"/><br>

<s:label key="login_username"/>

它们的区别:前面是纯文本,后者是一个块。我们可以通过查看login.jsp的源码来证明。
步骤四、当我们直接访问login.jsp时会报错,因为在login.jsp中用到了资源文件,而资源文件又依赖于LoginAction,所以我们只能通过此Action来跳到login.jsp。但是使用包范围、全局范围的资源文件时,可以直接访问login.jsp文件实现国际化。操作步骤如下:

首先在LoginAction中增加一个方法:

       public String doGoLogin() {

              return LOGIN;

       }

随后再在struts.xml中配置如下内容:
<package name="i18n" extends="struts-default" namespace="/">

              <action name="login" class="com.asm.LoginAction">

                     <result name="success">success.jsp</result>

                     <result name="login">login.jsp</result>                   

              </action>

</package>

接着再编写一个link.jsp页面,内容如下:
<a href="<%=request.getContextPath() %>/login!goLogin.action">登录</a>

直接访问Action中的方法 格式:doX(大写)xxx ---- ActionName!x(小写)xxx.action  注意此方法和前面二.7中相关方法的区别。 我们通过此Action跳转到login.jsp这样便能成功访问到login.jsp页面。
步骤五、在success.jsp中使用资源文件,主要内容如下:
<s:text name="login_suc">

                     <s:param value="%{username}"></s:param>

</s:text>

说明:在前面的资源文件中,我们配置了login_suc=Welcome {0},其中{0}表示占位参数,这里我们使用<s:param>来给此参数赋值。
步骤六、测试:在ie的internet选项中改变语言实现国际化的访问。

posted on 2016-06-16 15:52  Sharpest  阅读(193)  评论(0编辑  收藏  举报