1、maven配置文件引入架包:
<!-- SpringMVC -->
<dependency>
...
</dependency>
<!-- SpringMVC中用到了Hibernate的Validator包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.3.Final</version>
</dependency>
2、常用Bean对象的注释
@NotBlank 不为空或空字符串
@NotNull 不为空
@Size(min, max) 字符串长度
@Email 邮箱格式
@Pattern(regexp) 正则表达式匹配
注释用法:
public class LoginParam {
private String user;
private String password;
@NotBlank(message = "用户不能为空")
@Size(min = 5, max = 20, message = "用户长度范围为5-20个字符")
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
@NotBlank(message = "密码不能为空")
@Size(min = 5, max = 30, message = "密码长度范围为5-30个字符")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、后台处理
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView login(LoginParam param) {
return new ModelAndView("user/login");
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView loginSubmit(@Valid LoginParam param, BindingResult valid) {
if (valid.hasErrors()) {
return new ModelAndView("user/login");
}
return new ModelAndView("redirect:/");
}
(1) 提交方法,要在参数上添加 @Valid 注释,紧挨着参数后添加 BindingResult参数。
(2) 页面访问方法,LoginParam参数必须,要不会报错,找不到model。
4、前台处理,jstl标签的使用
<%@taglib prefix="f" uri="http://www.springframework.org/tags/form"%>
......
<f:form method="post" modelAttribute="loginParam">
<f:errors path="*" style="color:red" />
<div>
<label>用户名</label>
<f:input path="user" />
</div>
<f:errors path="user" style="color:red" />
<div>
<label>密码</label>
<f:password path="password" />
</div>
<f:errors path="password" style="color:red" />
<div>
<button type="submit">登录</button>
</div>
</f:form>
(1) <f:form> 中的 modelAttribute="loginParam" 值要和后台参数的类名相同。
(2) <f:errors> 重的path="*" 是匹配全部错误,path="user" 值匹配 user的错误。
5、向 BindingResult 中添加自己的错误信息
一般用的有两种:
(1) ObjectError 不对应到字段,可以被<f:errors path="*" />获取到。
(2) FieldError 对应到字段的,构造方法有两种:
new FieldError(String objectName, String field, String defaultMessage);
/* 建议是这种,这种可以把值 rejectedValue 传回到前台 */
new FieldError(String objectName, String field, Object rejectedValue,
boolean bindingFailure, String[] codes, Object[] arguments, String defaultMessage);
例子:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView loginSubmit(@Valid LoginParam param, BindingResult valid) {
valid.addError(new FieldError("loginParam", "user", param.getUser(), false, null, null,"手工添加的字段错误"));
valid.addError(new ObjectError("loginParam", "手工添加的通用错误"));
if (valid.hasErrors()) {
return new ModelAndView("user/login");
}
return new ModelAndView("redirect:/");
}
来源:oschina
链接:https://my.oschina.net/u/273301/blog/408653