介绍

在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定)。消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字段标签,并根据用户的语言环境将文本更改为特定的语言。

贴个本帖的地址,以免被爬:struts2官方 中文教程 系列七:消息资源文件  即 http://www.cnblogs.com/linghaoxinpian/p/6911223.html

下载本章节代码

信息资源属性文件

在Struts2 web应用程序中,我们可以通过创建具有与Action类相同名称的属性文件(.properties )来将消息资源属性文件与每个Struts 2 Action类关联起来。这个属性文件必须与Action类在相同的包下。对于我们的教程示例,假设我们希望将label标签显示的内容放置到一个单独的文件中,在这个文件中我们可以轻松地更改它们,并提供在其他语言中显示的功能。

新建属性properties文件

Register.properties

personBean.firstName=First name
personBean.lastName=Last name
personBean.age=Age
personBean.email=Email
thankyou=Thank you for registering %{personBean.firstName}.

以上只是一个标准的Java属性文件。key左value右。当Register action 被执行时,试图页面通过key引用该资源文件。

Key Attribute

Register.properties的key属性可以在textfield标签中使用,以告诉struts2框架 name和label属性使用什么值。避免了直接提供这些属性的值。打开register.jsp

      <s:textfield name="personBean.firstName" label="First name" />

修改为

<s:textfield key="personBean.firstName"  />

key属性指示Struts 2框架textfield的name属性(<s:textfield name="...."/>)的值使用与key的值(即name="personbean.firstName")。对于label属性的值,Struts 2在register.properties中找到键(key)personBean.firstName,然后将对应的值赋予label属性。

为了使能经过Action的处理后在跳转到register.jsp而不是直接打开register.jsp,我们需要打开index.jsp,进行修改

<p><a href="register.jsp">Please register</a> for our prize drawing.</p>

修改为

<s:url action="registerInput" var="registerInputLink" />
<p><a href="${registerInputLink}">Please register</a> for our prize drawing.</p>

我们使用Struts2的url标签来创建一个到registerInput的链接。然后我们使用该链接作为a标签的href属性值,并且在struts.xml中定义registerInput。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="basicstruts2" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<!--hello-->
<action name="hello" class="action.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action> <!-- register -->
<action name="register" class="action.RegisterAction" method="execute">
<result name="success">/thankyou.jsp</result>
<result name="input">/register.jsp</result>
</action> <!-- registerInput -->
<action name="registerInput" class="action.RegisterAction" method="input" >
<result name="input">/register.jsp</result>
</action>
</package> </struts>

运行

官网话太多,我直接画张图来说明执行流程。

图片太小就把图片拖到另一个浏览器窗口查看原图。

我们也可以使用 struts2的text标签来访问资源文件,因为thankyou.jsp也是通过RegisterAction来处理渲染给用户的,所以在thankyou中也可以访问RegisterAction.properties资源文件,修改thankyou.jsp中h3标签

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Registration Successful</title>
</head>
<body>
<h3><s:text name="thankyou" /></h3> <p>Your registration information: <s:property value="personBean" /> </p> <p><a href="<s:url action='index' />" >Return to home page</a>.</p>
</body>
</html>

运行有同样的效果

%{personBean.firstName} 告诉Struts 2调用getPersonBean,该方法返回一个Person对象。然后调用该对象的getFirstName方法,该方法返回一个字符串(用户输入到form表单的值),用最后的结果来替换这个部分

Package Level Properties(包级别的属性

上面的方法中,我们的属性文件(/struts_basic/src/action/RegisterAction.properties)必须要与对应的Action类(/struts_basic/src/action/RegisterAction.java)同名才可使用,那么如何才能是所有Action都能使用同一个属性文件(.properties)呢?

新建一个名为:package.properties的文件src/action/ 下,那么该包下所有Action均可使用该属性文件

package.properties内容如下:

greeting=Welcome to The Wonderful World of Struts 2

为了测试,在HelloWorld.jsp中添加一个h1标签

运行如下

全局属性文件

当然我们也可以在struts.xml文件中定义一个全局的属性文件(Global Properties),这个属性文件可以被所有视图页面引用。

添加以下内容到名为 global.properties 的文件中,当然,文件名称不必要是global.properties

/src/global.properties

contact=For assistance contact <a href='mailto:contact@email.com'>contact@email.com</a>

 struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" />
<!-- 全局属性文件start -->
<constant name="struts.custom.i18n.resources" value="global" />
<!-- 全局属性文件end -->
<package name="basicstruts2" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<!--hello-->
<action name="hello" class="action.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>

接着我们在index.jsp中使用这个global.properties文件

index.jsp

运行如下

国际化

使用消息资源文件(即属性文件.properties)还允许您提供不同语言的文本。默认情况下,Struts 2将使用用户的默认语言环境。如果该地区是英语的,那么使用的属性文件将是没有地区规范(例如RegisterAction.properties)的属性文件。如果地区不是英语,而是说西班牙语(es),那么Struts 2将寻找一个名为RegisterAction_es.properties的属性文件。创建一个名为RegisterAction_zh.properties的文件。该文件中添加了下面的中文的翻译。

src/action/RegisterAction_zh.properties

personBean.firstName=姓氏
personBean.lastName=名字
personBean.age=年龄
personBean.email=邮箱
thankyou=感谢您的注册, %{personBean.firstName}.

运行如下

struts2官方 中文教程 系列七:消息资源文件的更多相关文章

  1. struts2官方 中文教程 系列十:Form标签

    介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...

  2. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  3. struts2官方 中文教程 系列九:Debugging Struts

    介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...

  4. struts2官方 中文教程 系列八:异常处理

    在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...

  5. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  6. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  7. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  8. struts2官方 中文教程 系列六:表单验证

    先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介 ...

  9. struts2官方 中文教程 系列五:处理表单

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单  即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...

随机推荐

  1. python入门12 列表list

    列表使用率较高,方法也多. 列表的定义 #coding:utf-8 #/usr/bin/python """ 2018-11-10 dinghanhua 列表 " ...

  2. 【[ZJOI2010]网络扩容】

    题目 第一问直接板子敲上去 第二问并不明白直接在残量网络上加边的神仙做法 非常显然我们需要让流量加\(k\),那么我们就使得网络里的总流量为\(maxf+k\),\(maxf\)是第一问求出来的最大流 ...

  3. 如何使用react-redux

    之前学习了react,也学习了redux,那么react-redux是什么呢?实际上他是一个第三方的模块,他可以帮助我们在react之中更加方便的使用redux.首先如果想用react-redux,先 ...

  4. [译]GLUT教程 - 安装

    Lighthouse3d.com >> GLUT Tutorial >> Basics >> Setup 你需要什么 要用GLUT库开发程序,你可以下载最新版本3. ...

  5. postman发送HTTP请求自动生成MD5签名

    POSTMAN是常用的接口测试工具 如何进行MD5签名呢? 代码如下: /** * 通过request.data获取body的内容,这个是postman内置变量 * 常用内置参数如下: * reque ...

  6. 菜鸟崛起 DB Chapter 4 MySQL 5.6的数据库引擎

    数据库存储引擎是数据库底层的软件组件,我们平常看不到,但是却与我们操作数据库息息相关.DBMS使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能 ...

  7. java实现简单计算器功能

    童鞋们,是不是有使用计算器的时候,还要进入运行,输入calc,太麻烦了,有时候甚至还忘记单词怎么拼写,呵呵程序员自己写代码实现,又简单,又方便啊 以下为代码(想要生成可执行工具可参考:http://w ...

  8. mysql数据库关于事务的问题?求解答

    表格代码: CREATE TABLE `t_teacher` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `deposit` ) DEFA ...

  9. python运算符及优先级顺序

    python语言是一门脚本语言,支持面向对象.面向过程编程,兼具编译性和解释性的动态语言,整理出学习过程中一些基本Python运算符和运算符的优先级顺序. 一.算术运算符 运算符 描述 + 加 - 两 ...

  10. 《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇

    平均负载 指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,即平均活跃进程数 可运行状态:正在使用CPU或者正在等待CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态 (Run ...