struts2学习札记八(第8讲.Struts2的校验框架)
struts2学习笔记八(第8讲.Struts2的校验框架)
第8讲.Struts2的校验框架
之前的验证方式是struts2提供的硬编码的方式的验证,struts2还提供了一个优秀的校验框架,是基于xml文件配置的,我们可以通过这个xml配置文件,而不用再写任何的代码就能完成表单的输入校验。
一、如果要验证哪个action就要在那个action的同一目录下创建验证框架的xml的文件,还是基于上节课的register2.jsp的表单验证,所以在com.test.action包下创建RegisterAction-validation.xml文件(后面的-validation.xml是不变的,前面的是对应的要验证的action的名称):
三、同时注释掉action类中的对应的自定义的验证方法,注释后代码如下:
四、重新修改Register2.jsp页面中的显示错误信息的级别,因为之前的是actionerror级别的,要修改为fielderror级别的:
说明:如果校验信息不是很复杂的情况下尽量的使用校验框架,如果校验信息十分复杂的情况下要用validate()进行校验,目的都是将错误信息放到fielderror级别里面去。
第8讲.Struts2的校验框架
之前的验证方式是struts2提供的硬编码的方式的验证,struts2还提供了一个优秀的校验框架,是基于xml文件配置的,我们可以通过这个xml配置文件,而不用再写任何的代码就能完成表单的输入校验。
一、如果要验证哪个action就要在那个action的同一目录下创建验证框架的xml的文件,还是基于上节课的register2.jsp的表单验证,所以在com.test.action包下创建RegisterAction-validation.xml文件(后面的-validation.xml是不变的,前面的是对应的要验证的action的名称):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators > <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>username should not be blank!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">10</param> <message>username should be between ${minLength} and ${maxLength}</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>password should not be blank!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">10</param> <message>password should be between ${minLength} and ${maxLength}</message> </field-validator> </field> <field name="repassword"> <field-validator type="requiredstring"> <message>repassword should not be blank!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">10</param> <message>repassword should be between ${minLength} and ${maxLength}</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>age should be between ${min} and ${max}</message> </field-validator> </field> <field name="birthday"> <field-validator type="required"> <message>birthday should not be blank!</message> </field-validator> <field-validator type="date"> <param name="min">2001-01-01</param> <param name="max">2003-12-31</param> <message>birthday should be between ${min} and ${max}</message> </field-validator> </field> <field name="graduation"> <field-validator type="required"> <message>graduation should be not blank!</message> </field-validator> <field-validator type="date"> <param name="min">2005-01-01</param> <param name="max">2007-12-31</param> <message>graduation should be between ${min} and ${max}</message> </field-validator> </field> </validators>
三、同时注释掉action类中的对应的自定义的验证方法,注释后代码如下:
... @Override public String execute() throws Exception { return SUCCESS; } // public String abc() throws Exception { // // System.out.println("abc() method invoked"); // return SUCCESS; // } // // public void validateAbc(){ // // System.out.println("validateAbc() invoked"); // } @Override public void validate() { System.out.println("validate~~~~~~~~~~~~~~"); if(null == username || username.length() < 6 || username.length() > 10){ this.addActionError("username invalid"); } if(null == password || password.length() <6 || password.length() > 10){ this.addActionError("password invalid"); } else if(null == repassword || repassword.length() < 6 || repassword.length() > 10){ this.addActionError("repassword invalid"); } else if(!password.equals(repassword)){ this.addFieldError("password", "two passwords not the same"); } if(age <= 0 || age > 150){ this.addActionError("age should be between 1 and 150"); } if(null != birthday && null != graduation){ Calendar c1 = Calendar.getInstance(); c1.setTime(birthday); Calendar c2 = Calendar.getInstance(); c2.setTime(graduation); if(!c1.before(c2)){ this.addActionError("birthday should be before graduation"); } } } ...
四、重新修改Register2.jsp页面中的显示错误信息的级别,因为之前的是actionerror级别的,要修改为fielderror级别的:
<table align="center" width="40%"> <tr> <td> <s:fielderror cssStyle="color:red"/> </td> </tr> </table>
说明:如果校验信息不是很复杂的情况下尽量的使用校验框架,如果校验信息十分复杂的情况下要用validate()进行校验,目的都是将错误信息放到fielderror级别里面去。