1、代码校验
jsp
<%@ taglib uri="/struts-tags" prefix="s" %> <s:fielderror></s:fielderror> <form action="${pageContext.request.contextPath }/demo06/validata1"> 用户名<input type="text" name="username"/><br/> 密码<input type="password" name="password"/><br/> <input type="submit" name="提交"/> </form>
Action,多有提交到ValidateAction1的数据都需要validate()函数校验,要想单独对某个方法校验使用validateXxx()对其特定请求校验,请求先经过validateXxx()在经过validate(),通过addFieldError设置校验的回显信息
public class ValidateAction1 extends ActionSupport { private String username; private String password; @Override public void validate() { System.out.println("validate()"); if(username==null || "".equals(username)){ this.addFieldError("username", "用户名不能为空"); } if(password==null || "".equals(password)){ this.addFieldError("password", "密码不能为空"); } } public void validateAdd(){ System.out.println("validateAdd"); if(username!=null || (username.length()>0 && username.length()<5)){ this.addFieldError("username", "长度在0~5之间"); } } public String add() throws Exception { System.out.println(username+"--"+password); return NONE; } @Override public String execute() throws Exception { System.out.println(username+"--"+password); return NONE; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } }
strtus配置
<package name="demo06" namespace="/demo06" extends="struts-default"> <action name="validata1" class="demo06.ValidateAction1"> <result name="input">/demo06/validate1.jsp</result> </action> </package>
2、XML配置校验
jsp
<%@ taglib uri="/struts-tags" prefix="s" %> <s:fielderror></s:fielderror> <form action="${pageContext.request.contextPath }/demo06/validata2.action"> 用户名<input type="text" name="username"/><br/> 密码<input type="password" name="password"/><br/> <input type="submit" name="提交"/> </form>
action,要使用xml校验,必须为属性提供setter()
public class ValidateAction2 extends ActionSupport { private String username; private String password; @Override public String execute() throws Exception { System.out.println(username + "--" + password); return NONE; } public void setUsername(String username) { this.username = username; } public String getUsername() { return this.username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
编写validate配置文件ValidateAction2-validation.xml,Action类名--validation.xml,dtd在xwork-core-2.3.4.jar//xwork-validator-1.0.3.dtd中,可配置的内置校验器在com.opensymphony.xwork2.validator.validators//com/opensymphony/xwork2/validator/validators/default.xml中
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <message><![CDATA[用户名不能为空]]></message> </field-validator> </field> <field name="password"> <field-validator type="stringlength"> <param name="maxLength">7</param> <param name="minLength">3</param> <message><![CDATA[密码长度3~7位]]></message> </field-validator> </field> </validators>
struts配置
<action name="validata2" class="demo06.ValidateAction2"> <result name="input">/demo06/validate2.jsp</result> </action>
可配置的校验器
required (必填校验器,要求被校验的属性值不能为null)
requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
conversion(转换校验器,指定在类型转换失败时,提示的错误信息)
visitor(用于校验action中复合类型的属性,它指定一个校验文件用于校验复合类型属性中的属性)
expression(OGNL表达式校验器,它是一个非字段校验器, expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//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"> <message>客户姓名不能为空!</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>密码不能为空!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <message>密码长度不能小于6位</message> </field-validator> </field> <field name="repassword"> <field-validator type="fieldexpression"> <param name="expression"> <![CDATA[(password==repassword)]]> </param> <message>两次密码输入不一致</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">70</param> <message>客户年龄必须在18到70之间</message> </field-validator> </field> <field name="birthday"> <field-validator type="date"> <param name="min">1980-10-10</param> <param name="max">2050-10-10</param> <message>生日必须在指定范围!</message> </field-validator> </field> <field name="phone"> <field-validator type="regex"> <param name="expression"> <![CDATA[^18\d{9}$]]> </param> <message>手机号必须18开头!</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>邮箱格式非法!</message> </field-validator> </field> </validators>
针对于特定方法的校验
Action类名-ActionName(<action>元素name属性)-validation.xml