我刚开始学习Spring和坚持与表单验证(有刀/服务和所有默认设置)Spring MVC的验证状态400
我尝试做一个验证任务以防止插入到该领域超过3个符号
@Size (min = 1, max = 3)
后,我希望在数据满足我的验证,由1至3个符号的插入表单数据到数据库并在我的主页输出它,那么一切都很好,但是当这些条件不符合,我尝试插入4个或更多的符号,我收到HTTP STATUS 400
。没有数据库插入和没有视图输出。所以,我明白,有验证,但我不明白为什么它会告诉我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:/";
}
}
校验类
public class ValidationField {
@Size(min = 1, max = 3)
private String name;
@Size(min = 1, max = 3)
private String genre;
}
,并查看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>
创建单独的 BindingResult例如是否可以解释一下更多我应该怎么做? – Sabine 2015-04-03 14:01:24
只需通过重新排序来更改方法的签名,以便* BindingResult *对象遵循* @ ModelAttribute *。我已经添加了签名的外观,纠正了一个错误。 BindingResult是排序中唯一必须添加的参数,'因为你可以有更多的BindingResult,每个引用不同的ModelAttributes,所以弹簧在 – 2015-04-03 14:05:43
修正了另一个输入错误后立即应用,所以只需要命令* @ ModelAttribute(“user” )@Valid ValidationField validationField,BindingResult结果,Book book * – 2015-04-03 14:08:29