SpringMvc学习记录

来源:互联网 发布:科比与詹姆斯数据对比 编辑:程序博客网 时间:2024/05/24 06:39

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;}@Overridepublic String toString() {    return "username--"+username+"password--"+password+"nickname--"+nickname;}

}

12345678910111213141516171819202122232425262728293031323334

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

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

public class UserValidator implements Validator {

@Overridepublic boolean supports(Class<?> aClass) {    //判断是否是要校验的类,这里是User    return User.class.equals(aClass);}@Overridepublic 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");    }}

}

12345678910111213141516171819202122232425

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

import main.java.model.User;
……

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

//我们知道在Controller类中通过@InitBinder标记的方法只有在请求当前Controller的时候才会被执行//所以在这里注册校验器@InitBinderpublic 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 "--";}}123456789101112131415161718192021222324252627282930313233

上面代码可以看到@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”);
%>



用户登录



用户名:

密码:

昵称:




12345678910111213141516171819202122

这里写图片描述

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

0 0