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处理,如果还是找不到的话,就只好抛出异常了。

  • 相关阅读:
    icePDF去水印方法
    JAVA中pdf转图片的方法
    使用jQuery的ajax调用action的例子
    win7下JAVA环境变量配置方法
    Keil MDK仿真调试STM32的时候直接进入SystemInit函数
    山大王的个人勤奋和制度设计
    海思HI2115芯片-NB-IOT模块向外发短信测试
    UCOS III的时间片轮转调度的一个问题
    STM32F405的 ADC参考电压选择问题
    ACS712电流传感器应用
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/8108837.html
Copyright © 2011-2022 走看看