我看过有关此主题的其他帖子,但无法使其发挥作用。这似乎是一个简单的问题。如果有人可以提供帮助,我将不胜感激。
Person.java
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@Column(name = "PERSON_ID")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
public Person() {
}
public Person(String fname, String lname) {
this.firstName = fname;
this.lastName = lname;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String first_name) {
this.firstName = first_name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String last_name) {
this.lastName = last_name;
}
}
PersonController.java
@Controller
@RequestMapping("person")
public class PersonController {
@RequestMapping(value = "add", method = RequestMethod.POST)
public String addPerson(
@ModelAttribute("person") @Valid Person person, BindingResult result) {
log.info("in add");
personValidator.validate(person, result);
if (!result.hasErrors())
personService.addPerson(person);
return "redirect:/spring/person/list";
}
person.jsp
<body>
<form:form method="post" action="add.html" commandName="person">
<form:errors path="*" cssClass="errorblock" />
<table>
<tr>
<td><form:label path="firstName">First name</form:label></td>
<td><form:input path="firstName" /></td>
<td><form:errors path="*" cssClass="error" /></td>
</tr>
<tr>
<td><form:label path="lastName">Last name</form:label></td>
<td><form:input path="lastName" /></td>
<td><form:errors path="*" cssClass="error" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add" /></td>
</tr>
</table>
</form:form>
</body>
</html>
PersonValidator.java
@Component
public class PersonValidator implements Validator {
public void validate(Object arg0, Errors arg1) {
Person person = (Person) arg0;
if (personService.findPersonByName(person.getFirstName(), person.getLastName()) != null)
arg1.rejectValue("firstName", "first name empty");
//arg1.reject("save.person", "User already exists.");
}
}
personService.findPersonByName 不为 null 并且 result.hasErrors() 为 true,所以我知道表单有错误,但由于某些原因它们没有显示。
最佳答案
您正在执行重定向
mav = new ModelAndView("redirect:/spring/person/list", "person", person);
您的错误
存储在模型中,随后存储在HttpServletRequest
属性中。这些仅持续一个请求的持续时间。重定向会导致客户端发送新请求。因此,当呈现重定向 View 时,它们并不存在。
考虑使用 Flash 属性。查看RedirectAttributes
。这就是 POST-REDIRECT-GET 通常的工作原理。
关于java - Spring MVC 表单 :errors not displaying error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020428/