Sab*_*ine 2 java spring spring-mvc java-ee spring-validator
我刚刚开始学习Spring并坚持使用表单验证(有dao/service和所有默认设置)
我尝试进行验证任务,以防止在字段中插入超过3个符号
@Size (min = 1, max = 3)
Run Code Online (Sandbox Code Playgroud)
之后我想将表单数据插入到DB并将其输出到我的主页上,当数据满足我的验证并且由1到3个符号组成时,一切正常,但是当这些条件不满足时我尝试插入4或者更多的符号,我收到了HTTP STATUS 400.没有DB插入,也没有视图输出.所以我理解有验证,但我不明白为什么它会告诉我HTTP STATUS 400
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping(value = "addBook", method = RequestMethod.GET)
public String addUser(Model model) {
model.addAttribute("user", new ValidationField());
model.addAttribute("book", new Book());
return "addBook";
}
@RequestMapping(value = "addBook", method = RequestMethod.POST)
public String addBook( @ModelAttribute("user") @Valid ValidationField validationField, Book book, BindingResult result) {
/*this.user(book, result);*/
if (result.hasErrors()) {
return "addBook";
}
this.bookService.addBook(book);
return "redirect:/";
}
}
Run Code Online (Sandbox Code Playgroud)
验证类
public class ValidationField {
@Size(min = 1, max = 3)
private String name;
@Size(min = 1, max = 3)
private String genre;
}
Run Code Online (Sandbox Code Playgroud)
并查看addBook.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<t:tamplate>
<form:form method="post" action="addBook" commandName="book" modelAttribute="user">
<form:errors path="*" cssClass="alert alert-danger" element="div" />
<table>
<tr>
<td><form:input path="name"/></td>
<td><form:errors path="name"/></td>
</tr>
<tr>
<td><form:input path="genre" /></td>
<td><form:errors path="genre"/></td>
</tr>
<tr>
<td colspan="2"> <input type="submit" value="add book"> </td>
</tr>
</table>
</form:form>
</t:tamplate>
Run Code Online (Sandbox Code Playgroud)
您应该将BindingResult设置为立即遵循ModelAttribute,例如
public String addBook( @ModelAttribute("user") @Valid ValidationField validationField, BindingResult result, Book book)
Run Code Online (Sandbox Code Playgroud)
请查看文档http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-methods
除了BindingResult参数之外,大多数参数可以以任意顺序使用
并继续
Errors或BindingResult参数必须遵循立即绑定的模型对象,因为方法签名可能包含多个模型对象,而Spring将为每个模型对象创建单独的BindingResult实例