通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息
注意:
通过validateXxx()方法实现,validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
package action; import java.util.Date; import java.util.regex.Pattern; importcom.opensymphony.xwork2.ActionSupport; public class ValidateAction extendsActionSupport { privateString name; privateString pass; privateDate birth; privateInteger age; @Override publicString execute() throws Exception { returnSUCCESS; } publicString add(){ returnSUCCESS; } publicvoid validateAdd(){ System.out.println("validateAdd---------------"); if(name==null|| "".equals(name.trim())){ this.addFieldError("name","名称不能为空"); } if(age==null){ this.addFieldError("age","名称不能为空"); }elseif(!Pattern.compile("^([0-9]|[0-9]{2}|100)$").matcher(String.valueOf(age)).matches()){ } { addFieldError("age","年龄必须为1-100"); } } publicString getName() { returnname; } publicvoid setName(String name) { this.name= name; } publicString getPass() { returnpass; } publicvoid setPass(String pass) { this.pass= pass; } publicDate getBirth() { returnbirth; } publicvoid setBirth(Date birth) { this.birth= birth; } publicInteger getAge() { returnage; } publicvoid setAge(Integer age) { this.age= age; } }
<
?xml version="1.0"encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/hello"extends="struts-default"> <action name="login" class="action.ValidateAction"method="add"> <result> /index.jsp </result> <result name="input"> /login.jsp </result> </action> </package> </struts>
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags"prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"> <html> <head> <title>My JSP ‘index.jsp‘ starting page</title> </head> <body> <s:fielderror/> <s:form action="/hello/login"> <s:textfield name="name" label="用户名" /> <s:textfield name="pass" label="密码" /> <s:textfield name="age" label="年龄" /> <s:textfield name="birth" label="生日" /> <s:submit value="注册" /> </s:form> </body> </html>
1。类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
3。系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4。再调用action中的validate()方法。
5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
1.conversion validator 字段验证器,检查转换错误发生。
2.date validator 字段验证器检查提供的日期是否在特定的范围内。
3double validator 指定字段验证器检查双在一定范围内。
4email validator EmailValidator检查一个给定的字符串字段,如果不是空的,是一个有效的电子邮件地址。
字符串的正则表达式用于验证电子邮件地址是::
\\b(^[_A-Za-z0-9-](\\.[_A-Za-z0-9-])*@([A-Za-z0-9-])+((\\.com)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$)\\b
5expression validator 无级别验证器,验证基于正则表达式提供。6 fieldexpression验证器6fieldexpression validator 验证一个字段使用OGNL表达式。
7int validator 字段验证器,检查是否在一定的范围内指定的整数。
8regex validator 使用正则表达式验证字符串字段。
9required validator 要求field的值不能为null
10requiredstring validator必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格
11stringlength validator 字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格
12url validator 检查给定的字段是一个字符串和一个有效的URL
13visitor validator 用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags"prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"> <html> <head> <title>My JSP ‘login.jsp‘starting page</title> </head> <body> <s:fielderror /> <s:form action="/hello/login"> <s:textfield name="name" label="用户名" /> <s:textfield name="pass" label="密码" /> <s:textfield name="age" label="年龄" /> <s:textfield name="birth" label="生日" /> <s:submit value="注册" /> </s:form> </body> </html>
package action; import java.util.Date; import java.util.regex.Pattern; import com.opensymphony.xwork2.ActionSupport; public classValidateAction extends ActionSupport { /** * */ private static final long serialVersionUID= 1L; private String name; private String pass; private Date birth; private Integer age; @Override public String execute() throws Exception { return SUCCESS; } public String add() { return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
验证器的命名规范为 <ActionClassName>-validation.xml or <ActionClassName>-<ActionAliasName>-validation.xml.
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphonyGroup//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="name.requried"></message> </field-validator> </field> <field name="pass"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">2</param> <param name="trim">true</param> <message><![CDATA[密码应在2-10个字符之间1111]]></message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">100</param> <message>年龄必须在1到100之间</message> </field-validator> </field> <field name="birth"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2014-01-01</param> <message>生日必须在${min}到${max}之间!</message> </field-validator> </field> </validators>
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphonyGroup//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> </field> <field name="pass"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">2</param> <param name="trim">true</param> <message><![CDATA[密码应在2-10个字符之间]]></message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">100</param> <message>年龄必须在1到100之间</message> </field-validator> </field> <field name="birth"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2014-01-01</param> <message>生日必须在${min}到${max}之间!</message> </field-validator> </field> </validators>
将两个方法的名字的验证短路 设置short-circuit="true"
<field name="name"> <field-validator type="requiredstring"short-circuit="true"> <param name="trim">true</param> <message key="name.requried"></message> </field-validator> </field>
struts2入门教程五(表单数据的校验),布布扣,bubuko.com
原文:http://blog.csdn.net/wang9258/article/details/21039461