一、几种国际化输出方式

国际化:国际化的本质,就是查找,替换。程序界面上输出的是国际化消息的 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处理,如果还是找不到的话,就只好抛出异常了。

Java框架之Struts2(三)的更多相关文章

  1. Java框架之Struts2(一)

    在学习Struts2之前,我们要知道Java为什么要有反射机制呢?反射机制可以说是填补Java不能动态访问某一个类的空白.利用反射机制,动态的创建一个对象.动态的访问类的某个属性,而且访问哪一个属性自 ...

  2. java框架之Struts2(1)-简介及入门

    简介 Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器 (Controller) 来建立模型与视 ...

  3. java框架之Struts2(4)-拦截器&标签库

    拦截器 概述 Interceptor (拦截器):起到拦截客户端对 Action 请求的作用. Filter:过滤器,过滤客户端向服务器发送的请求. Interceptor:拦截器,拦截的是客户端对 ...

  4. Java框架之Struts2(六)

    一.OGNL表达式语言 Ognl Object Graphic Navigation Language(对象图导航语言),它是一种功能强大的表达式语言(Expression Language,简称为E ...

  5. Java框架之Struts2(二)

    一.Action 配置说明 //请求的直接转发 <package name="packageUser" namespace="" extends=&quo ...

  6. Java - 框架之 Struts2

    一. Package 标签 1. 标签属性:name        : 包的名称,只有在一个项目中不重名即可.extends       : 继承哪个包,默认为 struts-default.name ...

  7. java框架之struts2简介

    一.Struts2简介 1.Struts2概述                    Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. M:model-----数据 ...

  8. java框架之Struts2(2)-访问Servlet API及请求数据封装

    准备 为后面测试示例编写代码及配置如下: package com.zze.bean; import java.util.Date; public class User { private String ...

  9. java框架篇---Struts2的处理流程

    一.Struts2的处理流程: 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是 ...

随机推荐

  1. 1119 Pre- and Post-order Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  2. 【repost】jQuery笔记总结

    第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑,通过内置window和document对象,来操作内存中的DOM元素 J ...

  3. pyinstaller打包程序 带图片

    首选说一下,这种打包方式只能在本电脑上使用运行正常 准备:.py文件:你的程序 gif文件:你要用的图片 第一步: 在上面文件所在目录打开cmd 输入 pyi-makespec FP.py 会生成一个 ...

  4. Python自动化开发 - RESTful API

    本节内容 1.  RESTful 简介 2.  RESTful 设计指南 3.  Django REST Framework 最佳实践 4.  理论拓展与开放平台 5.  API文档化与测试 一  R ...

  5. 171. Excel表列序号

    题目:给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> ...

  6. Dynamic Programming | Set 1 (Overlapping Subproblems Property)

    动态规划是这样一种算法范式:将复杂问题划分为子问题来求解,并且将子问题的结果保存下来以避免重复计算.如果一个问题拥有以下两种性质,则建议使用动态规划来求解. 1 重叠子问题(Overlapping S ...

  7. Postgres通用翻页函数

    CREATE OR REPLACE FUNCTION fun_turnpage( PageSize INT, PageIndex INT, FldSort VARCHAR, StrCondition ...

  8. c# 多线程实现ping 多线程控制控件

    这个备份器放在项目目录下面,每次使用就双击一下,因为便捷性,就不采用xml等等储存信息,全部在面板内做,这样可以保证一个exe就运行了. 我发现运行起来还蛮快的,唯一没有实现的是ping通的电脑如果出 ...

  9. [Swift]正则表达式工具类

    正则表达式工具类 import Foundation //基于NSRegularExpression api 的正则处理工具类 public struct Regex { private let re ...

  10. LabVIEW(十二):VI本地化-控件标题内容的修改

    一.对于一般LabVIEW的学习,很少遇到本地化的问题但是我们经常会遇到界面控件标题的显示问题.由于各个技术领域的专业性,往往用户对VI界面的显示有自己的要求,其中就包括控件的标题问题,这可以理解成本 ...