zoukankan      html  css  js  c++  java
  • Java框架之Struts2(三)

    一、几种国际化输出方式

    国际化:国际化的本质,就是查找,替换。程序界面上输出的是国际化消息的 key 所对应的值。Struts2 中的国际化机制,会根据 key 到资源文件中找对应的文本来替换上面的key。

    几种输出国际化信息的方式:

    -- 在JSP页面中使用<s:text name=""/>标签输出国际化信息:

    -- 在Action类中,可以继承ActionSupport,使用getText()方法,该方法的第一个参数用于指定属性文件中的key。

    -- 在表单标签中,通过key属性指定属性文件中的key,//如: <s:textfield name="realname" key="user"/>

    == 第一种方式

    1.准备两个资源文件,放在src 目录下,资源文件的命名格式如下:

    中国大陆: AAA_zh_CN.properties

    美国: AAA_en_US.properties

    内容分别如下 外国的  AAA_en_US.properties

    userNameTxt=UserName
    passwordTxt=Password
    titleTxt=welcome this website

    中国的  AAA_zh_CN.properties

    userNameTxt=用户名:
    passwordTxt=密码
    titleTxt=欢迎光临小站

    2.在Struts2.xm中 配置一个常量

    <constant name="Struts2.custom.i18n.resources" value="AAA"></constant>

    3.在AddUser.jsp中

    <%@ taglib uri="/Struts2-tags" prefix="s" %>
        <s:text name="titleTxt" />
        <form action="#" method="post">
            <s:text name="userNameTxt" />    <input type="text" name="aaa" /><br>
            <s:text name="passwordTxt" />    <input type="text" name="bbb" /><br>
            <s:textfield name="xxx" key="userNameTxt"/> //会显示出一个文本框,前面的文字是 userNameTxt 指写的文字
            <input type="submit">
    </form>

    查看的时候 工具-internet 选项 语言

    == 在Action类中输出国际化信息

    public class UserAction  extends ActionSupport{ //必须继承ActionSupport 才能有getText 方法
        @Override
        public String execute()  { //注意,是重写 父类的execute 方法
               String title=this.getText("titleTxt");
               ActionContext.getContext().put("msg", title);
               return "success";
               }
    }

    在页面中,使用el表达式直接取 msg 就行了 ( ${msg} )

    二、带有占位符的国际化

    在上面的配置文件再加入一个带参数的

    validateTxt=the {0} value must be {1}

    在UserAdd.jsp 页面上:

    <s:text name="validateTxt">
            <s:param>password</s:param>
            <s:param>int</s:param>
    </s:text>

    将分别得到

    password 的值必须是 int   或 the password  value must be int

    那么在Action中的那个该怎么办?

    从父类那继承的方法 getText  有多个重载形式

    //String title=this.getText("titleTxt");
    String title=this.getText("validateTxt", new String[]{"密码","int"}); //用这种方式可以把占位符用到的参数值传进去 

    三、包范围资源文件和Action范围资源文件

    == 包范围

    资源文件过于巨大会产生问题,可以考虑一个包用一个资源文件,可以在 包下放置 package_zh_CN.properties ,package_en_US.properties 资源文件 必须这么命名(前面必须叫package),这就完事了,访问的时候先从包里找,不到再到外层找。

    == Action范围

    我们可也可以为某个Action单独指定资源文件,在Action所在的路径下,放置 ActionClassName_zh_CN.properties 资源文件 如 UserAction_zh_CN.properties

    例子,将上面的 配置文拖到和 UserAction 相同的路径下,改名为 UserAction_zh_CN.properties  访问即可

    四、<s:i18n> 标签

    使用<s:i18n>标签指定直接从某个特定的资源文件中取数据。

    <s:i18n name="AAA">
    <s:text name=“welcome”/>
    </s:i18n>

    如果要访问类路径下某个包下的资源文件,对于前面的例子可以如下

    <s:i18n name="AAA"> //指定访问的是全局的
        <s:text name="titleTxt" />
        </s:i18n>
        <s:i18n name="cat/action/package"> //指定访问的是 某个包下的
        <s:text name="titleTxt" />
    </s:i18n>
                 
    <s:i18n name="welcat/action/UserAction"> //指定访问的是某个Action 的
         <s:text name="titleTxt" />
    </s:i18n>

    i18n 指的是 internationalization (国际化) 首字母,和尾字母.加上中间的18个字符。

    五、Struts22 的异常处理

    通过Struts22的异常处理机制,我们无需在execute 的方法中捕捉任何异常,仅需在Struts2.xml,文件中进行配置,即可完成相应的异常处理。

    使用 <exception-mapping ...> 过行控制需要配置两个属性:

    exception 映射的异常类型

    result 出现异常时,对应的逻辑视图名

    根据  <exception-mapping ...> 出现的位置,异常映射又可分为两种:

    -- 局部异常映射

    将 <exception-mapping ...> 做为Action 元素的子元素配置

    -- 全局异常映射

    将 <exception-mapping ...> 做为 <global-exception-mapping...>元素的子元素配置

    当然执行Action的时候发生异常时,如果在Action中没有捕获异常而是抛出异常的话,Struts22会首先在正在执行的Action中查找<exception-mapping>,寻找对应的Exception进行处理,如果找不到,才会去<global-exception-mappings>去寻找对应的Exception处理,如果还是找不到的话,就只好抛出异常了。

  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/8108837.html
Copyright © 2011-2022 走看看