SpringMvc学习记录

SpringMVC服务器验证一种是有两种方式,一种是基于Validator接口,一种是使用Annotaion JSR-303标准的验证,下面主要是学习这两种,工作中推荐后者,方便很多
一.基于Validator接口的验证.

首先创建User实例,并加入几个属性

public class User {
private String username;
private String password;
private String nickname;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getNickname() {
    return nickname;
}

public void setNickname(String nickname) {
    this.nickname = nickname;
}

@Override
public String toString() {
    return "username--"+username+"password--"+password+"nickname--"+nickname;
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

接着创建用于校检的类UserValidator,让其实现Validator,覆盖其中的两个方法

import main.java.model.User;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

public class UserValidator implements Validator {

@Override
public boolean supports(Class<?> aClass) {
    //判断是否是要校验的类,这里是User
    return User.class.equals(aClass);
}

@Override
public void validate(Object o, Errors errors) {
    User u = (User) o;
    if (null == u.getPassword() || "".equals(u.getPassword())){
        //此方法可以加四个参数,第一个表单域field,
        //区分是哪个表单出错,第二个errorCode错误码,
        //第三个制定了资源文件中占位符,第四个具体错误返回信息
        //简写版可以把2,3参数去掉
        errors.rejectValue("password",null,null,"password is null");
    }
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

上面的类只实现了对密码判断是否为空,为空则注册这一错误信息,也就是”password is null”,接下来要实现控制器,控制器要做的事情,第一是注册这个校验器,第二是实现校验.

import main.java.model.User;
……

/**
* 加上@Controller决定这个类是一个控制器
*/
@Controller
@RequestMapping(“/user”)
public class HelloController {

//我们知道在Controller类中通过@InitBinder标记的方法只有在请求当前Controller的时候才会被执行
//所以在这里注册校验器
@InitBinder
public void initBainder(DataBinder binder){
    binder.replaceValidators(new UserValidator());

}
//这个方法主要是跳转到登录页面
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(Model model){
    model.addAttribute(new User());
    return "user/login";
}
//处理登录表单
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(@Validated User user, BindingResult br){

    if (br.hasErrors()){
        return "user/login";
    }
    return "--";
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

上面代码可以看到@Validated User user, BindingResult br这两个参数,@Validated表明参数user是要校验的类,BindingResult是存储错误信息的类,两者必须一一对应,并且位置挨着,不能中间有其他参数,
最后随便写一个jsp页面实现校检

<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
<%@taglib prefix=”sf” uri=”http://www.springframework.org/tags/form” %>
<%
request.setCharacterEncoding(“utf-8”);
%>



用户登录



用户名:

密码:

昵称:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

这里写图片描述

前面实现的是局部校验,只对当前控制器有效,如果要实现全局校验的话需要配置springMVC.xml文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值