struts中的数据校验
2016-06-02 17:44
323 查看
1.struts中如何进行数据校验
在每一个Action类中,数据校验一般都写在业务方法中,比如login()、register()等。struts提供了数据校验功能。每个继承自ActionSupport的Action类都可以实现一个validate()方法。struts使用拦截器org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor进行数据校验,根据拦截器的执行流程,它会在执行Action的业务方法之前调用intercecpt()方法,因此可以完成数据校验的功能。在ActionSupport类中有一个ValidationAwareSupport的对象,该对象维护了一个Map<String, List<String>> fieldErrors属性,用它来存储错误信息。在Action类的业务方法中调用
super.addFieldError("user","用户名必须填写!");
会执行ActionSupport中的
public void addFieldError(String fieldName, String errorMessage) { this.validationAware.addFieldError(fieldName, errorMessage); }
ValidationAwareSupport类中的addFieldError如下:
public synchronized void addFieldError(String fieldName, String errorMessage) { Map errors = this.internalGetFieldErrors(); Object thisFieldErrors = (List)errors.get(fieldName); if(thisFieldErrors == null) { thisFieldErrors = new ArrayList(); errors.put(fieldName, thisFieldErrors); } ((List)thisFieldErrors).add(errorMessage); }
该方法将一条错误信息添加到Map中,一个key值可以对应多条错误信息。
2.struts中数据验证的方法
代码方式验证Action中指定的方法(validate+要验证的方法名作为验证函数名)
在Action类中重写validate()方法。//仅验证register方法 public void validateRegister(){ if(user.getUserName() == null||"".equals(user.getUserName())) { //保存错误信息 super.addFieldError("user","用户名必须填写!"); } if(user.getPassword() == null||"".equals(user.getPassword())) { //保存错误信息 super.addFieldError("user","密码必须填写!"); } }
代码方式验证Action中的所有方法(直接重写validate()方法)
XML方式验证Action中指定的方法(xml命名为ActionClassName-ActionName-validation.xml)
XML方式验证Action中的所有方法(xml命名为ActionClassName-validation.xml)
使用validate()方法进行验证,涉及很多重复的验证逻辑,例如:非空验证、数值验证、email验证、日期验证等。因此struts对于常用的验证进行了封装,提供了验证器。struts提供的验证器在xwork-core-2.3.4.1.jar!\com\opensymphony\xwork2\validator\validators\default.xml中,共16个,如下:
<validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators>
xml文件名称语法:ActionClassName-validation.xml,而且需要与当前要验证的action 在同一目录。(和局部转换器相似)
使用xwork-core-2.3.4.1.jar!\xwork-validator-1.0.dtd约束来写xml文件。
<?xml version="1.0" encoding="utf-8" ?> <!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="user.userName"> <field-validator type="requiredstring"> <message>用户名必须填写!</message> </field-validator> </field> <field name="user.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="user.birth"> <field-validator type="date"> <message></message> </field-validator> </field> </validators>
相关文章推荐
- java获得当前文件路径
- spring总结
- java反射_改变private中的变量及方法的简单实例
- Java绘图原理(一) Graphics的各种。。
- spring @component的作用
- springmvc 接受特殊类型字段的处理方法
- java反射 获取 /List<实体> objData 泛型后的属性值
- java中利用反射调用另一类的private方法的简单实例
- java基础知识点滴整理(一)
- Java并发编程:并发容器之CopyOnWriteArrayList
- spring
- Java 必读 书籍 推荐
- Java 反射调用静态方法的简单实例
- java date int 转换
- Spring父子容器
- quartz与spring整合
- Java语言实现五种常用的算法的应用举例
- JAVA和JVM运行原理揭秘
- java代码:双色球用数组和集合编写
- java_数据类型