0
在提交表單之前,Spring MVC 3.x中是否有一種簡單的方式顯示錶單錯誤消息(通過JSR303驗證獲得)?在使用Spring MVC提交表單之前顯示JSR-303錯誤
請考慮本帖最後的示例代碼。
最終用戶應該編輯其中初始數據已無效的表單。
提交表單(POST方法)時錯誤顯示正確,但初始表單顯示(GET方法)時顯示錯誤。
有沒有簡單的方法來顯示初始表單顯示(GET方法)的錯誤? (有沒有辦法重新使用形式:錯誤標記爲這個目的)
JSP查看 form1.jsp:
<%@ page session="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html><body>
<form:form commandName="form1" method="post">
<s:bind path="*">
<c:if test="${status.error}">
<div style="color: red;">There are errors:</div>
<form:errors /><br />
</c:if>
</s:bind>
<form:label path="field1" >Field1:</form:label>
<form:input path="field1" />
<form:errors path="field1" cssStyle="color: red;"/>
<br />
<form:label path="field2" >Field2:</form:label>
<form:input path="field2" />
<form:errors path="field2" cssStyle="color: red;"/>
<br />
<form:button name="submit">Ok</form:button>
</form:form>
</body></html>
控制器:
@Controller @SessionAttributes("form1")
public class Form1Controller {
@ModelAttribute("form1") public Form1Bean createForm1() { return new Form1Bean(); }
@RequestMapping(value = "/form1/edit", method = RequestMethod.GET)
public String getEdit(Model model) {
// here we pretend to get form1 from database, and store it in session.
// form1 in database may have invalid field values.
// Perform a JSR-303 validation here ?
// MAIN QUESTION: What's the easy way to add errors to model and display them ?
return "/form1";
}
@RequestMapping(value = "/form1/edit", method = RequestMethod.POST)
public String postEdit(@Valid @ModelAttribute("form1") Form1Bean form1, BindingResult result, Model model) {
if (result.hasErrors()) {
return "/form1";
} else {
return "redirect:/done";
}
}
}
支持豆:
public class Form1Bean {
@Size(min=4,max=10) private String field1; // getters and setters ommited for brevity
@Size(min=4,max=10) private String field2;
public Form1Bean() {
this.field1 = "bad"; this.field2="good"; // start with an invalid field1
}
//...
}
編輯:解釋來自@ JB-nizet答案後,下面是完整的控制器源:
@Controller @SessionAttributes("form1")
public class Form1Controller {
@Autowired org.springframework.validation.Validator validator;
@ModelAttribute("form1") public Form1Bean createForm1() { return new Form1Bean(); }
@RequestMapping(value = "/form1/edit", method = RequestMethod.GET)
public String getEdit(@ModelAttribute("form1") Form1Bean form1, Errors errors, Model model) {
// here we pretend to get form1 from database, and store it in session.
// form1 in database may have invalid field values.
validator.validate(form1, errors);
return "/form1";
}
@RequestMapping(value = "/form1/edit", method = RequestMethod.POST)
public String postEdit(@Valid @ModelAttribute("form1") Form1Bean form1, BindingResult result, Model model) {
if (result.hasErrors()) {
return "/form1";
} else {
return "redirect:/done";
}
}
}
做了一些測試,它似乎工作!比你@ JB-nizet
很好的答案!謝謝。 – user1544553