来源:http://www.cnitblog.com/intrl/archive/2009/07/01/59762.html
在之前发表的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架 整合开发 的基础上加入验证框架和国际化,做法如下:
(一)验证框架
1、在 LoginAction.java 的并列位置建立文件 LoginAction-validation.xml
LoginAction-validation.xml
1
<?
xml version="1.0" encoding="UTF-8"
?>
2 <! DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
3 < validators >
4 < field name ="username" >
5 < field-validator type ="requiredstring" >
6 < param name ="trim" > true </ param >
7 < message > 用户名不能为空 </ message >
8 </ field-validator >
9 </ field >
10 < field name ="password" >
11 < field-validator type ="requiredstring" >
12 < param name ="trim" > true </ param >
13 < message > 密码不能为空 </ message >
14 </ field-validator >
15 </ field >
16 </ validators >
2、效果截图
2 <! DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
3 < validators >
4 < field name ="username" >
5 < field-validator type ="requiredstring" >
6 < param name ="trim" > true </ param >
7 < message > 用户名不能为空 </ message >
8 </ field-validator >
9 </ field >
10 < field name ="password" >
11 < field-validator type ="requiredstring" >
12 < param name ="trim" > true </ param >
13 < message > 密码不能为空 </ message >
14 </ field-validator >
15 </ field >
16 </ validators >
(二)国际化
1、创建国际化资源文件
在com.test.action包下建立两个包级别国际化资源文件package_en_US.properties和package_zh_CN.properties
package_en_US.properties
package_zh_CN.properties
2、LoginAction-validation.xml 验证框架配置文件的修改,使用key属性读取国际化资源文件,若所读取资源字段不存在则直接显示key信息
1
<?
xml version="1.0" encoding="UTF-8"
?>
2 <! DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
3 < validators >
4 < field name ="username" >
5 < field-validator type ="requiredstring" >
6 < param name ="trim" > true </ param >
7 < message key ="name.requried" ></ message >
8 </ field-validator >
9 </ field >
10 < field name ="password" >
11 < field-validator type ="requiredstring" >
12 < param name ="trim" > true </ param >
13 < message > ${getText("pass.requried")} </ message >
14 </ field-validator >
15 </ field >
16 </ validators >
其中第7行和地13行为显示国际化信息的两种写法,第13行的写法要求applicationContext-actions.xml中对应bean要有scope属性,否则会出错!
2 <! DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
3 < validators >
4 < field name ="username" >
5 < field-validator type ="requiredstring" >
6 < param name ="trim" > true </ param >
7 < message key ="name.requried" ></ message >
8 </ field-validator >
9 </ field >
10 < field name ="password" >
11 < field-validator type ="requiredstring" >
12 < param name ="trim" > true </ param >
13 < message > ${getText("pass.requried")} </ message >
14 </ field-validator >
15 </ field >
16 </ validators >
3、运行结果截图
浏览器字符编码为英文时:
浏览器字符编码为中文时:
4、applicationContext-actions.xml中bean——loginAction的配置scope="prototype"的作用:
strut2 的action在spring的配置文件中是单态的,所以每次返回的错误对象都是原来的!为了生成新的对象,在spring的配置文件中要加scope="prototype"。
根据以上第2点说明,我们先把LoginAction-validation.xml 中第13行改为 < message key ="pass.requried" ></ message >
若去掉scope="prototype"属性,则多次输入错误时将发生如下结果: