一 先上效果图:这是注册前
没有填写登录名,点击注册
显示用户名不能为空,实现方式是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就可以了,如下
去掉else里面的redirect
调试的过程中怀疑过很多地方有问题,但是最终都证明是瞎猜,所以说,理清JSR的工作过程并冷静分析是最重要的,我想,很多bug的解决都应该是这样的。
文章的不足之处还望指正,转载请注明出处。160612