第9 章 Struts2 国际化
在第 1 章综述中笔者已经将国际化的基本概念做了简单说明。本章扩展国际化内容,向读者展示在 Struts2 中应用国际化的各种范例。
9.1 Struts2 国际化基础应用
本节首先介绍国际化在 Struts2 中的基础使用方法。主要介绍基础使用方式的原理以及如何使用占位符号来实现 Web 项目国际化功能的开发。
9.1.1 国际化基础使用方式
技术要点
以登录功能为例,来介绍如何实现中文、英文的国际化。
= 国际化属性文件定义原理。
= ActionSupport 类中 getText 方法基础说明。
= 视图界面中如何显示国际化信息。
演示代码
使用的 Action 文件:
- <!-------------文件名:LoginAction.java--------------->
-
public class LoginAction extends ActionSupport {
- ………
-
public String execute() throws Exception {
-
username = getUsername();
-
password = getPassword();
-
-
try {
-
-
if (username != null && !username.equals("") && password != null&& !password.equals("")) {
-
ActionContext.getContext().getSession().put("user", getUsername());
-
-
System.out.println(getText("username")+username);
-
System.out.println(getText("password")+password);
-
-
FORWARD = "success";
-
} else {
-
-
FORWARD = "input";
- }
-
} catch (Exception ex) {
- ex.printStackTrace();
- }
-
return FORWARD;
- }
- ………
- }
<!-------------文件名:LoginAction.java--------------->
public class LoginAction extends ActionSupport {
………
public String execute() throws Exception {
username = getUsername();// 属性值即JSP页面上输入的值
password = getPassword();// 属性值即JSP页面上输入的值
try {
// 判断输入值是否是空对象或没有输入
if (username != null && !username.equals("") && password != null&& !password.equals("")) {
ActionContext.getContext().getSession().put("user", getUsername());
//打印getText方法,取得属性文件中定义的值
System.out.println(getText("username")+username);
System.out.println(getText("password")+password);
// 根据标志内容导航到操作成功页面
FORWARD = "success";
} else {
// 根据标志内容导航到操作失败页面
FORWARD = "input";
}
} catch (Exception ex) {
ex.printStackTrace();
}
return FORWARD;
}
………
}
属性文件中国际化定义:
- <!--------------文件名:struts.properties-------------->
- #支持本地化的资源文件名定义
- struts.custom.i18n.resources=messageResource
<!--------------文件名:struts.properties-------------->
#支持本地化的资源文件名定义
struts.custom.i18n.resources=messageResource
支持中文的属性文件内容:
- <!------------文件名:messageResource_zh_CN.properties------->
- #中文属性定义文件
- #用key=value格式定义页面上显示的内容
- username=用户名
- password=密 码
- loginSubmit=登录
- loginPage=登录页面
- successPage=操作成功页面
- welcome=欢迎您
- user.required=请输入用户名!
- pass.required=请输入密码!
<!------------文件名:messageResource_zh_CN.properties------->
#中文属性定义文件
#用key=value格式定义页面上显示的内容
username=用户名
password=密 码
loginSubmit=登录
loginPage=登录页面
successPage=操作成功页面
welcome=欢迎您
user.required=请输入用户名!
pass.required=请输入密码!
支持英文的属性文件内容:
- <!--------文件名:messageResource_en_US.properties----------->
- #英文属性定义文件
- #用key=value格式定义页面上显示的内容
- username=User Name
- password=User Password
- loginSubmit=login
- loginPage=login page
- successPage=success page
- welcome=Welcome You
- user.required=please input your name!
- pass.required=please input your password!
<!--------文件名:messageResource_en_US.properties----------->
#英文属性定义文件
#用key=value格式定义页面上显示的内容
username=User Name
password=User Password
loginSubmit=login
loginPage=login page
successPage=success page
welcome=Welcome You
user.required=please input your name!
pass.required=please input your password!
国际化的登录 login.jsp
- <!-----------------文件名:login.jsp----------------->
- ………
- <html>
- <head>
-
<title><s:text name="loginPage"></s:text></title>
- </head>
- <body>
- <!-- form标签库定义,以及调用哪个Action声明 -->
-
<s:form action="Login">
-
<table width="60%" height="76" border="0">
- <!-- 各标签定义 -->
-
<s:textfield name="username" key="username"/>
-
<s:password name="password" key="password" />
-
<s:submit key="loginSubmit" align="center"/>
- </table>
- </s:form>
- </body>
- </html>
<!-----------------文件名:login.jsp----------------->
………
<html>
<head>
<title><s:text name="loginPage"></s:text></title>
</head>
<body>
<!-- form标签库定义,以及调用哪个Action声明 -->
<s:form action="Login">
<table width="60%" height="76" border="0">
<!-- 各标签定义 -->
<s:textfield name="username" key="username"/>
<s:password name="password" key="password" />
<s:submit key="loginSubmit" align="center"/>
</table>
</s:form>
</body>
</html>
国际化的登录成功 success.jsp 文件:
- <!----------------文件名:success.jsp------------------->
- ………
- <head>
-
<title><s:text name="successPage"></s:text></title>
- </head>
- <body>
- <!-- 取得session中用户名值 -->
-
${sessionScope.user},<s:text name="welcome"></s:text>
- </body>
- …………
<!----------------文件名:success.jsp------------------->
………
<head>
<title><s:text name="successPage"></s:text></title>
</head>
<body>
<!-- 取得session中用户名值 -->
${sessionScope.user},<s:text name="welcome"></s:text>
</body>
…………
中文的登录界面如图 9.1 。
图 9.1 中文登录界面
英文的登录界面如图 9.2 。
图 9.2 英文登录界面
中文登录成功界面如图 9.3 。
图 9.3 中文登录成功界面
英文登录成功界面如图 9.4 。
图 9.4 英文登录成功界面
LoginAction 代码中打印在控制台用户名和密码值(支持中文)如图 9.5 。
图 9.5 中文属性值控制台打印信息
LoginAction 代码中打印在控制台用户名和密码值(支持英文)如图 9.6 。
图 9.6 英文属性值控制台打印信息
代码解释
( 1 ) 本节是 Struts2 国际化最基本的应用。首先请读者阅读 struts.properties 文件中代码。“ struts.custom.i18n.resources ”并不是笔者随意取的名字。它是 Struts2 设计者定义的使用全局国际化属性文件的常量名。如果对它进行了定义,则开发者可以在 Web 项目中使用类似 XXX_language_country.properties 这样的属性文件名格式来创建在不同语言环境中的属性文件。这也就是在上述代码中有“ messageResource_zh_CN.properties ”和“ messageResource_en_US.properties ”这两个各支持中文和英文的属性文件名的由来。因为笔者在 struts.properties 文件中定义了“ struts.custom.i18n.resources ”值为 messageResource ,这样 messageResource 作为属性文件名,可以实现各个支持不同国家语言的国际化属性文件。
注意:其实关于国际化属性文件名的定义不仅仅可以在 struts.properties 中定义,也可以在 struts.xml 和 web.xml 这两个配置文件中定义。之所以不在这里介绍,具体原因在第四章介绍如何实现上传下载功能的拦截器篇章已经记述,这里不再重复说明。如果读者对在两个 xml 文件中定义国际化属性文件名又兴趣,可自行查阅其它技术文摘。
( 2 ) LoginAction 继承 ActionSupport 类,可以使用 ActionSupport 中 getText 方法。这里 getText 方法中的字符串参数都是在国际化属性文件中定义的 key 。之前章节也说明过属性文件中定义格式都是以“ key=value ”格式定义。 getText 方法得到 key 作为方法参数,返回的结果就是 value 。从图 9.5 、图 9.6 也可以看出在两个国际化属性文件中“用户名”和“密码”的 value 是不相同的,因此在不同的语言环境下得到的值就不同了。一个是中文另一个是英文。
注意: getText 方法在 ActionSupport 中是重载方法。因此它还有几个重名的 getText 方法,具体使用在有占位符的国际化属性文件中。稍后章节将具体介绍。
( 3 )在 login.jsp 和 success.jsp 中,笔者使用 struts2 标签 <text> 。该标签的 name 属性定义为属性文件中的“ key ”,在 Struts2 的 Action 中 getText 方法就可以将 value 的值显示在视图界面上。而在其他 struts2 标签中,增加 key 属性的定义,也可以将国际化属性文件中的 value 值作为各个标签的值显示在视图界面上。比如“ <s:textfield name="username" key="username"/> ”在原先可以使用 label 属性定义显示值。现在使用 key 属性,在不同语言环境下 username 这个 key 得到的 value 值就不同。效果见图 9.1 、图 9.2 。
注意: Struts2 中有个名字为 i18n 的拦截器,它的使用目的就是在 Action 执行前查看 Session 中的 request_locale 参数的值是什么。如果是“ zh_CN ”它就将之后执行的所有 Action 的语言环境设置为中文语言环境。如果是“ en_US ”则是英文语言环境。在本示例和接下来的示例中,读者可以在操作系统下的“控制面板 à 区域和语言选项”中选择区域来查看在英文和中文语言环境下示例显示的异同。当然也可以直接在浏览器的地址栏中在 action 请求后面写上“? request_locale=zh_CN ”这样的数据。具体可以这么写的原因就是通过手工输入的 request_locale 值,来让 i18n 拦截器得到该值进行相关语言设置
分享到:
相关推荐
### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...
### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用程序的开发过程。与传统的Java Web...
struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义
本讲义将详细介绍Struts2的核心概念、工作原理以及如何在实际项目中应用。 一、Struts2简介 Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,旨在解决Struts1在可扩展性和灵活性上的不足。Struts2提供...
在本讲义中,我们将深入探讨Struts2的基本概念、依赖的库、启动配置以及配置文件。 首先,开发Struts2应用需要依赖一些核心的JAR文件。这些文件包括: 1. `struts2-core-2.x.x.jar`:这是Struts2框架的核心库,...
### Struts2框架详解 #### 一、Struts2框架介绍与概述 ##### 1.1 Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它提供了强大的功能来帮助开发者构建灵活、可扩展...
第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...
本讲义详细介绍了Struts2框架的各个方面,帮助开发者从基础到进阶全面掌握其用法。 1. **Struts2概述** Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并解决了其局限性,提供了更优秀的行动控制器...
### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的演变**:从Struts1到Struts2,框架经历了从MVC(Model-View-Controller)架构的经典实践到更为灵活、强大的迭代升级。 - **Struts2的...
本教程讲义深入浅出地介绍了Struts2的核心概念和技术,旨在帮助开发者快速掌握这个框架的使用。 在Struts2中,主要知识点包括: 1. **MVC设计模式**:MVC模式是软件工程中的经典设计模式,它将应用程序分为模型...
这个“struts2讲义”显然提供了一个全面的教程,旨在帮助学习者理解和掌握Struts2的核心概念和技术。以下是Struts2的一些关键知识点: 1. **MVC模式**:Struts2基于Model-View-Controller(MVC)设计模式,它将应用...
Struts2讲义1 Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web开发框架,由Apache软件基金会维护。它继承了Struts1的优点,并结合了WebWork框架的功能,提供了更强大的控制层解决方案。Struts2的...
Struts2讲义 作者:吴峻申 目录 第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 1.2.1 标签库介绍 13 1.2.2 拦截器应用目的 14 1.2.3 FilterDispatcher和Action概述 14 1.2.4 ...
西安野马计算机培训学校的STRUTS2讲义,可能涵盖了这一框架的基础知识和高级特性,帮助学员理解和掌握Struts2的核心概念。 首先,Struts2的基础部分可能包括以下几个方面: 1. **架构原理**:讲解Struts2的MVC设计...
Struts2是Apache软件基金会...总的来说,黑暗浪子的这本Struts2讲义涵盖了Struts2的各个方面,无论对于初学者还是有经验的开发者,都是一个宝贵的参考资料,能帮助读者深入理解和熟练运用Struts2框架,提高开发效率。