如果相同的验证规则作为公共验证器使用,仅需修改 短路验证 中的 三个国际化资源文件,及公共验证器,和在页面与作为Model的类中添加相映的字段,number
示例如下:
~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~
三个国际化资源文件
基类 :nihao.properties
注意:动态调用fieldName 使用的方法是${getText(fieldName)} ,而后把fieldName 中name 的属性名也配置到国际化资源文件中,这样可以实现多语言的切换
username=UserName password=Password password2=Password submit=Submit time=Time:{0} error.int=${getText(fieldName)} needs to be between ${min} and ${max} age=Age number=Number中文:nihao_zh_CN.properties
username=\u7528\u6237\u540D password=\u8F93\u5165\u5BC6\u7801 password2=\u518D\u6B21\u786E\u8BA4\u5BC6\u7801 submit=\u63D0\u4EA4 time=\u65F6\u95F4:{0} time2=\u65F6\u95F4:${birth} error.int=${getText(fieldName)} \u9700\u8981\u5728 ${min} \u548C ${max}\u4E4B\u95F4 age=\u5E74\u9F84 number=\u6570\u5B57英文:nihao_en_US.properties
username=UserName password=Password password2=Password submit=Submit time=Time:{0} time2=Time:${birth} error.int=${getText(fieldName)} needs to be between ${min} and ${max} age=Age number=Number
TestAgeValidation-validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <field name="age"> <!-- 类型转换验证 --> <field-validator type="conversion" short-circuit="false" > <message>类型转换错误</message> </field-validator> <!-- 看看添加了短路验证 short-circuit="false" 若类型转换错误的时候,还会不会进行下面的 int整型验证 --> <field-validator type="int" short-circuit="false"> <param name="min">1</param> <param name="max">130</param> <message key="error.int"></message> </field-validator> </field> <!-- 新增此条验证器 --> <field name="number"> <!-- 类型转换验证 --> <field-validator type="conversion" short-circuit="false" > <message>类型转换错误</message> </field-validator> <field-validator type="int" short-circuit="false"> <param name="min">2</param> <param name="max">20</param> <message key="error.int"></message> </field-validator> </field> <validator type="expression"> <param name="expression"><![CDATA[password==password2]]></param> <message>密码不一致</message> </validator> </validators>
package com.baidu.domain; public class Person { private Integer age; private String password; private String password2; private Integer number; public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } public String getPassword2() { return password2; } public void setPassword2(String password2) { this.password2 = password2; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [age=" + age + ", password=" + password + ", password2=" + password2 + ", number=" + number + "]"; } }
仅以 validation.jsp 页面为例,其他类同!
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br><br> <s:debug></s:debug> <a href="testAge3.action?request_locale=zh_CN">中文</a> <a href="testAge3.action?request_locale=en_US">English</a> <br><br> <a href="index.jsp">主页</a> <center> <s:actionerror/> <s:form action="testAge1" > <s:textfield name="age" key="age"></s:textfield> <s:textfield name="number" key="number"></s:textfield> <s:password name="password" key="password"></s:password> <s:password name="password2" key="password2"></s:password> <s:submit key="submit"></s:submit> </s:form> </center> </body> </html>
英文:
中文:
实现了 相同的验证规则,可以使用同一条响应信息,且能动态的切换 相对映的 fieldName的 name 属性名!