官术网_书友最值得收藏!

4.5 Struts 2的國際化與應用案例

國際化是指應用程序運行時,可根據客戶端請求來自的國家/地區、語言的不同而顯示不同的界面。常用i18n作為“國際化”的簡稱,Struts 2框架通過資源文件的方式來實現國際化。使用國際化,首先需要建立不同語言的資源文件,并把中文符轉化為Unicode代碼,然后在struts.xml配置文件中配置資源文件。

4.5.1 資源文件

語言資源文件內容是由一組key-value對組成的。其格式如下。

    loginName=用戶名稱
    loginPassword=用戶密碼

針對不同的語言環境,需要定義不同的資源文件。資源文件放在“源包”(src)下,全局資源文件的命名可以有以下3種形式。

● 資源文件名_語言種類編碼_國家編碼.properties。

● 資源文件名_語言種類編碼.properties。

● 資源文件名.properties。

資源文件如果使用第3種命名方式,即缺省語言代碼,若系統找不到與客戶端請求的語言環境相匹配的資源文件,則系統使用該默認的屬性文件。

例4-7】假設對登錄系統進行國際化處理,根據不同的語言環境顯示英文和中文用戶界面。創建英文和中文版本的資源文件,分別取名為globalMessages_zh_CN.properties和globalMessages_en_US.properties。

提示:對于中文資源文件內容,需要將中文字符轉化為Unicode編碼。在Eclipse開發環境中,自動進行轉換。若使用其他開發工具,根據其特點,選取相應的方法。

1)建立中文版資源文件:globalMessages_zh_CN.properties,代碼如下。

    title=登錄頁面
    username=姓名
    password=密碼
    submit=登錄
    reset=重置
    message.success=你已成功登錄。現進入了主頁。
    message.failure=你登錄失敗。現進入注冊頁面,請注冊你的信息。

2)建立英文版資源文件:globalMessages_en_US.properties,代碼如下。

    title = Login Page
    username = Input your username
    password = Input your password
    submit = Submit
    reset = Reset
    message.success = you're successful to login in. Now you've entered the main page.
    message.failure = you fail to login in. You need register your information.

4.5.2 資源文件的訪問

編寫完國際化資源文件后,需要在struts.xml文件中配置國際化資源文件的名稱(或者在struts.properties屬性文件內直接設置資源文件),從而使Struts 2的i18n攔截器在加載國際化資源文件時能找到這些國際化資源文件。

1.資源文件的配置

在struts.xml中,需要使用Struts 2的i18n攔截器,通過constant元素配置常量,指定國際資源文件名稱,value的值就是常量值,即國際化資源文件的名稱,配置格式如下。

2.訪問資源文件

當建立資源文件并配置后,就可以在Web應用程序中引用這些資源文件。但不同的Web技術(JSP、Struts 2中的Action、XML)其引用方法不同。

1)JSP頁面上使用國際化資源。

JSP頁面上使用國際化資源,一般使用<s:text>標簽,直接顯示資源文件內的屬性值。另外,在表單中要注意以下兩種情況。

● 表單不使用theme主題,即表單的theme屬性不能設置為simple,此時使用表單標簽的key屬性。例如,【例4-7】給出登錄頁面的設計,其代碼如下。

    <s:form action="">
        <s:textfield name="username" key="username"></s:textfield>
        <s:password name="password" key="password"></s:password>
        <s:submit key="submit"></s:submit>
    </s:form>

● 表單使用theme主題,即表單的theme屬性若設置為simple,則表單標簽的key屬性不起作用,此時,需要使用<s:text>標簽添加提示信息。例如,【例4-7】登錄頁面也可以給出如下的等價設計,其代碼如下。

    <s:form action="" theme="simple">
        <s:text name="username"/>:<s:textfield name="username"></s:textfield><br>
        <s:text name="password"/>:<s:password name="password"> </s:password><br>
        <s:submit key="submit"></s:submit>
    </s:form>

2)Action訪問國際化資源文件,通過getText(String key)方法獲取資源信息。注意:采用該方式,Action必須繼承ActionSupport。

例如,在【例4-7】中給出如下Action的定義,并配置Action。

    package com.edu.i18n.action;
    import com.opensymphony.xwork2.ActionSupport;
    public class TestI18nAction extends ActionSupport {
        public String execute() throws Exception {
            //在Action中訪問國際化資源文件的value值,這里是"username"
            String username = getText("username");
            System.out.println(username);
            return SUCCESS;
        }
    }

配置Action和資源文件,代碼如下。

    <struts>
        <constant name="struts.custom.i18n.resources" value="globalMessages"></constant>
        <package name="default" namespace="/" extends="struts-default">
            <action name="testI18n" class="com.edu.i18n.action.TestI18nAction">
                <result>/i18n.jsp</result>
            </action>
        </package>
    </struts>

當運行該Action時,在控制臺上輸出username對應的“國際化信息”。

3)利用超鏈接實現動態加載國際化資源文件——直接進入所需要的語言頁面。

在超鏈接的后面附著request_locale的請求參數,其參數值為“語言國家代碼”。注意:超鏈接必須是一個Struts 2的Action請求。例如,對于前面給出的Action:testI18n,利用超鏈接直接加載國際化資源,從而按規定的語言顯示頁面。

    <a href="testI18n.action? request_locale=en_US">按英文顯示頁面</a>
    <a href="testI18n.action? request_locale=zh_CN">按中文顯示頁面</a>

4.5.3 Struts 2的國際化應用案例

例4-8】在【例4-7】已經給出的資源文件基礎上,設計具有“中英文”的登錄系統。

【分析】對于登錄系統的業務流程,在前面的一些案例中已經介紹過,請參考。

【設計】該系統需要設計的組件有以下幾個。

1)兩個頁面:登錄頁面login.jsp和成功登錄頁面loginsuccess.jsp。

2)兩個資源文件:支持英文登錄和支持中文登錄的資源文件。

3)登錄驗證的控制器LoginAction類。該控制器的業務邏輯是:如果驗證成功,則跳轉到loginsuccess.jsp頁面;如果驗證不成功,則重新返回到登錄頁面(login.jsp)。

【實現過程】

1)建立工程c4_i18n,并在web.xml中配置核心控制器。

2)編寫國際化資源文件。見【例4-7】給出的資源文件。

3)編寫視圖組件輸出國際化消息。

● 中英文登錄頁面(login.jsp)的代碼如下。

    <html> <head><title><s:text name="title" /></title></head>
      <body>
        <s:form action="checkLogin" method="post">
            <s:textfield name="name" key="username" size="20" />
            <s:password name="password" key="password" size="22" />
            <s:submit key="submit" />
        </s:form>
      </body>
    </html>

● 登錄成功頁面(loginSuccess.jsp)的代碼如下。

    <html> <head> <title> <s:text name="message.success"/></title> </head>
        <body>
          <s:text name="username"/>:<s:property value="name"/><br>
          <s:text name="password"/>:<s:property value="password"/>
        </body>
        <br><a href="login.jsp"> <s:property value="tip"/></a>
    </html>

4)編寫控制器Action, login.jsp對應的業務控制器LoginAction類,代碼如下。

    package com.edu.i18n.action;
    //省略了import;
    public class LoginAction extends ActionSupport {
        private String name;
        private String password;
        private String tip; //用于存放標題信息
        //省略了屬性的setter/getter方法
        public String execute() throws Exception{
            if(getName().equals("QQ")&&getPassword().equals("123") ){
                ActionContext.getContext().getSession().put("name", getName());
                tip=getText("title");
                return "success";
            }else{ return "error"; }
        }
    }

5)在struts.xml中配置Action與國際資源文件,配置內容如下。

    <struts>
        <constant name="struts.custom.i18n.resources" value="globalMessages" />
        <constant name="struts.i18n.encoding" value="UTF-8" />
        <package name="I18N" extends="struts-default">
          <action name="checkLogin" class="loginAction.LoginAction">
              <result name="success">/loginSuccess.jsp</result>
              <result name="error">/login.jsp</result>
          </action>
      </package>
    </struts>

6)項目部署和運行。

項目部署后運行,如果操作系統是在中文系統下,運行login.jsp頁面,將出現中文提示信息的運行頁面;如果使用的是英文操作系統或者通過設置瀏覽器語言,運行時將出現英文登錄頁面。在中文情況下的運行界面如圖4-7所示。

圖4-7 【例4-8】的運行界面

a) 登錄頁面b) 顯示登錄成功頁面

主站蜘蛛池模板: 杨浦区| 苗栗市| 滨州市| 长垣县| 奈曼旗| 北海市| 志丹县| 鄱阳县| 马山县| 宕昌县| 来安县| 湖北省| 乌什县| 大连市| 图片| 星座| 巍山| 台湾省| 五台县| 班玛县| 叶城县| 嘉祥县| 江川县| 青州市| 自治县| 临泽县| 扎兰屯市| 龙山县| 和龙市| 井研县| 桃源县| 寻乌县| 梁河县| 盈江县| 卫辉市| 密云县| 扬中市| 宝应县| 松桃| 鹤山市| 政和县|