![](/img/trans.png)
[英]how to display error message on server side validation in spring mvc
[英]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.