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 = "action") String action, Map<String, Object> model) {
    String resultURL = null;

    if (result.hasErrors()) {
      prepareUpdate(model, user);
      return USER_CREATE_URL;
    }
    return resultURL;
  }

(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>

Spring3.0 入门进阶(6):自定义校验器

时间: 2024-12-25 16:32:07

Spring3.0 入门进阶(6):自定义校验器的相关文章

Android进阶:自定义视频播放器开发(下)

上一篇文章我们主要讲了视频播放器开发之前需要准备的一个知识,TextureView,用于对图像流的处理.这篇文章开始构建一个基础的视频播放器. 一.准备工作 在之前的文章已经说过了,播放器也是一个view,我们要在这个view上播放视频流.所以我们要自定义一个简单的viewgroup,比如继承FrameLayout.还出就是布局简单,其他控件可以往上面添加.大家见过的视频播放器的控制器都是放在视频的上方的.这样就是用FrameLayout布局是最好的. class SmallVideoPlaye

javax.validation 自定义校验器

import java.util.Iterator; import java.util.List; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.apache.commons.lang3.StringUtils; public class ListStringPatternValidator implements Constra

Spring3.0入门笔记(1)

这几天利用项目结项后的空隙,入门学习下Idea+maven+spring+springMVC.作为一个菜鸟,好记性不如烂笔头,在这里简要写下一些笔记. 1.idea里没有类似myeclipse的workspace的概念,与之类似的是project.同事一个project下可以有多个module,这里的module类似于myeclipse中的project. 2,maven是一个帮助构建(build)项目,管理jar包依赖的工具.它的使用和工作原理跟我现在用的myeclipse直接丢(引入)jar

Android进阶:自定义类加载器加载加密类文件

之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等.其实笔者对类加密比较感兴趣,就稍稍调研了一下.类加密的其实是为了防止APP被反编译,防止反编译的方法有很多种,比如混淆,加固等.自己对类文件进行加密,并自定义类加载器也是一种办法: 首先我们的代码打包编译之后会变成难以读懂的二进制字节码,并且变成.class文件.但是简单的APP编译出来之后可以被反编译,甚至你写的

Android进阶:自定义视频播放器开发(上)

随着快手,抖音,西瓜视频等视频APP的崛起,视频播放已经成为主流,此时作为Android研发的你,想要提高自己的能力还不知道怎么开发视频播放器怎么行?所以今天就带着大家一起开发一个简易播放器:SmallVideoPlayer 需求分析 我们观察一个视频播放器,可以看到视频播放器除了正在播放的视频还有很多控件,比如播放按钮,暂停按钮,播放进度条,播放计时器等.这么多控件显然无法播放视频,但是他们都在控制视频的播放.由此可见视频播放器可以分为两层,一层为视频播放器控制层,一层为真正的视频播放层. 所

Spring3.0配置多个事务管理器(即操作多个数据源)的方法

大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义多个transactional manager,并为qualifier属性指定不同的值:然后在需要使用@Transactional注解的时候指定TransactionManager的qualifier属性值或者直接使用bean名称.配置和代码使用的例子: <tx:annotation-driven/

《Spring3.0就这么简单》--学习笔记2

第7章SpringMVC 1.controller中,如果希望方法入参也添加到模型中,只需要在相应的入参前面使用@ModeAttribute 2.Spring MVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器.如果处理方法的入参为Map或者Model类型(org.springframework.ui.Model,类似于Map,比Map更易用),SpringMVC会将隐含模型的应用传递给这些入参.于是开发者可以通过这个入参访问到模型中的所有数据,也可以向模型中添加新的属性数据.

Asp.Net MVC4入门指南(8):给数据模型添加校验器

在本节中将会给Movie模型添加验证逻辑.并且确保这些验证规则在用户创建或编辑电影时被执行. 保持事情 DRY ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(Don't Repeat Yourself)".ASP.NET MVC鼓励您指定功能或者行为,只做一次,然后将它应用到应用程序的各个地方.这可以减少您需要编写的代码量,并减少代码出错率,易于代码维护. 给ASP.NET MVC 和 Entity Framework Code First 提供验证支持是 DR

thinkphp5.0自定义验证器

虽然我早就会些php基础语法,我套过数据,自己写的控制器层,不是用的api方式,那个公司是为了锻炼我,所以才那样做的,基本上的东西都是用的框架自带的,重来自己没有去封装过这些东西,所以编程思想上,还很欠缺,所以我得先好好模仿一下别人的代码. 问题: 如何自定义验证器类,并且如何使用自定义规则; 不管是验证器,还是拦截器,过滤器,都是要先继承相应的类,只要继承了就是对应的什么验证器,拦截器...了; eg: 1.自定义验证器类 class ValidateCustom extends Valida