10. JSR303验证
1. 引入验证依赖包
classmate-1.3.3.jar
hibernate-validator-5.4.0.Final.jar
jboss-logging-3.3.0.Final.jar
validation-api-1.1.0.Final.jar
2.验证
2.1先在要验证的实体上添加验证注解@Valid
public User saveUser(@Valid User u) {
return u;
}
2.2然后在实体的属性上对每一个属性进行验证
public class User {
private int uid;
@NotEmpty(message="用户名不能为空")
private String uname;
//@DateTimeFormat(pattern="yyyy-MM-dd")
private Date date;
@Length(min=3,max=6,message="密码长度介于3-6位")
private String pwd;
private String remark;
private String hobbies;
@NotEmpty(message="职位不能为空!")
private List<Integer> jobs;
}
2.3然后在处理器方法中通过BindingResult接受验证后的错误信息,同时通过@ModelAttribute注解将实体对象以及验证后的错误信息返回到页面
@RequestMapping("saveUser")
public User saveUser(Model m,@ModelAttribute("user") @Valid User u,BindingResult br) {
return u;
}
2.4在处理器方法中进行逻辑判断,验证没有错误则跳转到其他页面,有错误信息则转发到当前页面
@RequestMapping("saveUser")
public String saveUser(Model m,@ModelAttribute("user") @Valid User u,BindingResult br) {
if (br.hasErrors()) {
//有错误信息
List<Work> wlist=new ArrayList<>();
wlist.add(new Work(1, "项目经理"));
wlist.add(new Work(2, "高级程序员"));
wlist.add(new Work(3, "人事总监"));
m.addAttribute("wlist", wlist);
return "form";
}
return "main";
}
2.5在form.jsp显示错误信息通过<form:errors>标签 <form:errors path="属性名"></form:errors>
<form:form action="saveUser" method="post" modelAttribute="user">
姓名:<form:input path="uname"/>
<form:errors path="uname"></form:errors><br>
ID :<form:hidden path="uid"/><br>
密码:<form:label path="pwd"></form:label>
<form:password path="pwd" showPassword="true"/>
<form:errors path="pwd"></form:errors><br>
简述:<form:textarea path="remark"/><br>
爱好:<form:checkbox path="hobbies" value="1"/>聊天天1
<form:checkbox path="hobbies" value="2"/>聊天天2
<form:checkbox path="hobbies" value="3"/>聊天天3<br>
职位: <form:checkboxes items="${wlist}" path="jobs" itemValue="wid" itemLabel="wname"/>
<form:errors path="jobs"></form:errors><br>
<form:button>保存</form:button>
</form:form>