首页 > 代码库 > Spring3.0 入门进阶(6):自定义校验器
Spring3.0 入门进阶(6):自定义校验器
在Spring 3 中,对表单提交的校验方式比较常见的有两种
(1)基于注解:对于简单的属性校验,例如,长度,非空等,可以使用Spring,或是Hibernate自带的校验注解
(2)自定义校验类:对于复杂的业务校验可以自定义校验类,该类继承自org.springframework.validation.Validator
(3)前台JS校验
增加表单校验功能大概分一下几个步骤
定义校验规则
基于注解的验证
只需要在相关的实体字段上添加校验注解即可,下面的例子基于hibernate的校验标签
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Email; public class User extends BasePO { private static final long serialVersionUID = 6295814719063548261L; private Long id; @Length(min = 3, max = 20) private String name; @Length(min = 6, max = 20) private String pwd; @Email private String email; /*get set 省略*/
自定义校验类
创建基于org.springframework.validation.Validator的子类,实现supports,validate方法
import org.springframework.validation.Errors; import org.springframework.validation.Validator; import com.eric.User; public class UserValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return User.class.equals(clazz); } @Override public void validate(Object target, Errors errors) { User user = (User) target; if (!user.getPwd().equals(user.getRetryPwd())) { errors.rejectValue("retryPwd", "error.pwd.notmath"); } } }
声明校验
基于注解的验证
注解的校验,只需要在spring的配置文件中添加如下代码段<mvc:annotation-driven/>
自定义校验类
需要在Spring MVC Controller中添加以下方法
@InitBinder protected void initBinder(WebDataBinder binder) { binder.addValidators(new UserValidator()); }
使用校验
不管是自定义校验,还是基于注解的校验,在使用的方式上没有区别,都需要经过下面两步
(1)在Controller 方法中添加@Valid注解
当方法的参数中使用@Valid注解时,进入该方法时会对传进来的user参数进行校验,校验的结果存储在result中,可以在方法中对result.hasErrors()的状态进行判断
@RequestMapping(USER_UPDATE_URL) public String action(@Valid User user, BindingResult result, @RequestParam(value = http://www.mamicode.com/"action") String action, Mapmodel) {> (2)在页面中添加错误标签
<sf:errors path="retryPwd" cssClass="error"/> 中的path指定了对应的属性路径
<div class="form-group"> <label for="password"><spring:message code="user.field.pwd" /></label> <sf:password path="pwd" id="pwd" class="form-control" size="15" showPassword="true" maxlength="50" /> <sf:errors path="pwd" cssClass="error" /></div><div class="form-group"> <label for="confirmpassword"><spring:message code="user.field.repwd" /></label> <sf:password path="retryPwd" id="retrypwd" class="form-control" size="15" maxlength="50" showPassword="true" /> <sf:errors path="retryPwd" cssClass="error" /></div>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。