簡體   English   中英

Spring MVC - 是否存在顯示表單驗證錯誤消息的替代方法(不使用@ModelAtrribute和@Valid)?

[英]Spring MVC -Is there alternative approach to display form validation error message (without using @ModelAtrribute along with @Valid)?

嘗試在簡單的Web應用程序中使用基於Spring注釋的驗證。 在使用@ModelAttribute和@Valid時,我在字段旁邊收到驗證錯誤,但是當我向模型添加對象時,沒有收到錯誤消息。

建議顯示表單驗證錯誤消息的任何替代方法(即不使用@ModelAtrribute和@Valid)

以下是代碼:

EmployeeModel.java

@Entity
@Table(name = "Employee")
public class EmployeeModel implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    @NotNull(message = "ID is required")
    private Integer employee_id;

    @Column(name = "Name")
    @NotEmpty(message = "Name is required")
    private String employee_name;

    @Column(name = "Manager")
    private String manager;

    public Integer getEmployee_id() {
        return employee_id;
    }

    public void setEmployee_id(Integer employee_id) {
        this.employee_id = employee_id;
    }

    public String getEmployee_name() {
        return employee_name;
    }

    public void setEmployee_name(String employee_name) {
        this.employee_name = employee_name;
    }

    public String getManager() {
        return manager;
    }

    public void setManager(String manager) {
        this.manager = manager;
    }

    @Override
    public String toString() {
        return "Employee [id=" + employee_id + ", Name=" + employee_name
                + ", Manager=" + manager + "]";
    }
}

Controller中的代碼片段

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveEmployee(Model model, @Valid EmployeeModel employee, BindingResult result) {
    if (result.hasErrors()) {
        model.addAttribute("employee", employee);
        //model.addAttribute(employee);
        return "EmployeeForm";
    }
    employeeService.addEmployee(employee);
    return "forward:/";
}

視圖:

<form:form action="save" method="post" modelAttribute="employee">
                <tr>
                    <td><form:label path="employee_id">Employee ID:</form:label></td>
                    <td><form:input path="employee_id" /></td>
                    <td><form:errors path="employee_id"/></td>
                </tr>
                <tr>
                    <td><form:label path="employee_name">Employee Name:</form:label></td>
                    <td><form:input path="employee_name" /></td>
                    <td><form:errors path="employee_name"/></td>
                </tr>
                <tr>
                    <td><form:label path="manager">Manager:</form:label></td>
                    <td><form:input path="manager" /></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit"
                        value="Save"></td>
                </tr>
            </form:form>

如果我使用注釋行

//model.addAttribute(employee)

我得到異常聲明:java.lang.IllegalStateException:BindingResult和bean名稱'employee'的普通目標對象都不可用作請求屬性。

用。替換注釋行

model.addAttribute("employee",employee)

頁面獲取加載了先前輸入的值,這意味着無效對象未被替換,仍然不顯示錯誤消息。

以上可以使用@ModelAttribute和@Valid來實現,但還有其他選擇,即不使用@ModelAtrribute嗎?

使用@ModelAttribute和Model有什么區別,因為到目前為止我認為兩者的工作方式類似?

@ModelAttribute填充類的字段,然后填充要傳遞回視圖的模型的屬性。

您還可以對saveEmployee方法進行以下更改。 您不需要向模型添加屬性。 @ModelAttribute自動為您添加。

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveEmployee(@Valid @ModelAttribute(name = "employee") EmployeeModel employee, BindingResult result) {
    if (result.hasErrors()) {
        return "EmployeeForm";
    }
    employeeService.addEmployee(employee);
    return "forward:/";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM