在spring mvc中实现JSR303验证并将验证结果传回给视图层

一 先上效果图:这是注册前

在spring mvc中实现JSR303验证并将验证结果传回给视图层_第1张图片

没有填写登录名,点击注册

在spring mvc中实现JSR303验证并将验证结果传回给视图层_第2张图片

显示用户名不能为空,实现方式是JSR303。

二 代码如下

这里不给出所有的代码,因为篇幅有限,给出和实现验证功能有关的代码

1 在user-servlet.xml中添加


2 在register.php添加

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>


      学号  :

      登录名 :

      学生姓名:中文姓名
   
      密码  :

      确认密码:

      邮箱  :找回密码时用

     身份证号:修改密码时用
  
      

3 在model添加

private String student_name;
@Column(name="student_name")
@NotEmpty(message="用户名不能为空")
public String getStudent_name() {
return student_name;
}
public void setStudent_name(String student_name) {
this.student_name = student_name;
}

4.在controller添加

@RequestMapping(value="/register",method=RequestMethod.GET)
public String register(Model model)
{
model.addAttribute(new Student());
return "register";
}

@RequestMapping(value="register",method=RequestMethod.POST)
public String register(@Validated Student student,BindingResult br,String student_name,String student_password,String student_code,String student_true,String student_email,String student_idcard,String ensure_password)
{
  if(student_password.equals(ensure_password)&&!(br.hasErrors()))
   {
Student s=new Student(student_name,student_password,student_code,student_email,student_idcard,student_true);
studentService.save(s);
return "register_success";
    }
  else
  {
return "register";
  }
}
标为红色的是实现验证功能的关键代码,不可少。

三 关于验证功能的实现过程

1 在配置文件中加上如上代码

2 在lib下加上相关的包,主要有bean-validator.jar和jstl-1.2.jar。

3 在模型层的get方法前加上@NotEmpty或者其他的constraints。

4 在控制层get方法里面向视图层传递一个参数,即model.addAttribute(new Student());

  在视图向控制层POST的时候,在控制层加上@Validated Student student,BindingResult br,注意br一定要跟在student后面。

5 如果注册时填入的参数有问题的时候,返回时一定要返回注册的页面,这就是为什么上面的效果图能看到具体的注册错误的原因。

6 在jsp页面一定要写上 :登录名 :

其中的errors path就是为了显示注册的错误

四 过程中遇到的问题

我在开始做这个项目的是时候,如果注册的信息有误,重新返回注册页面是不会有错误信息提示的,想过用model进行错误提示,不过那样就发挥不了JSR的优点了。后来试图用JSR实现这个功能,但是一直显示不了错误提示。调试了差不多一个晚上,发现是redirect搞的鬼,因为redirect返回jsp页面时不会带上控制层的参数,这样就显示不了具体的validated错误了,这个错误是由控制层传递给视图层的。去掉redirect就可以了,如下

在spring mvc中实现JSR303验证并将验证结果传回给视图层_第3张图片

去掉else里面的redirect

在spring mvc中实现JSR303验证并将验证结果传回给视图层_第4张图片

调试的过程中怀疑过很多地方有问题,但是最终都证明是瞎猜,所以说,理清JSR的工作过程并冷静分析是最重要的,我想,很多bug的解决都应该是这样的。

文章的不足之处还望指正,转载请注明出处。160612





你可能感兴趣的:(java,web)