java - Spring MVC 表单 :errors not displaying error

标签 java spring

我看过有关此主题的其他帖子,但无法使其发挥作用。这似乎是一个简单的问题。如果有人可以提供帮助,我将不胜感激。

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/

相关文章:

java - 如何从 kotlin 中的辅助构造函数调用 'super()'?

java - 这个 XML/XSD 有什么问题?

java - Spring Boot 1.4 测试 : Configuration error: found multiple declarations of @BootstrapWith

spring - 了解 spring 调度程序 servlet 初始化

Spring - CORS 不适用于安全配置

java - 无法使用 Java Jira Rest Cllient 更新 jira 中问题的单选字段

java - 动态添加的JTable不显示

java - 在方法之间重用 PreparedStatement?

java - 如何为jsp页面配置cron作业?

spring - 将 hibernate-seach-orm 添加到 POM 后出现 AbstractMethodError