如果此問題之前已被問過,請道歉。我希望有人能介入並幫我弄清楚爲什麼我的表單驗證錯誤沒有顯示出來。Spring MVC表單:錯誤未顯示
我使用的是Spring 3.0.3和Hibernate,我使用jsr-303驗證來驗證我的表單輸入。我有一個Spring控制器,它可以處理GET頁面,該頁面包含一個藉助Spring的表單taglib創建的表單。在這種形式下,用戶可以更改他們的名字並將其保存到數據庫中。如果任何輸入爲空,那麼包含該表單的頁面應該再次顯示並顯示錯誤消息。同一個控制器處理頁面的提交。看起來控制器在大多數方面都能正常工作,但是當用戶提交的表單出現錯誤時,頁面上不會顯示任何錯誤。
這裏是什麼看起來像形式:
<form:form commandName="changeNameCommand">
<form:errors path="*" cssClass="errorBox" />
<table width="100%" border="0" cellspacing="5" cellpadding="5" align="left">
<tr>
<td><b>First Name:</b></td>
<td><form:input path="firstName" value="${user.firstName}" /></td>
</tr>
<tr>
<td><b>Last Name:</b></td>
<td> <form:input path="lastName" value="${user.lastName}" /></td>
</tr>
</table>
</form:form>
注意,所以存在被用來填充與用戶當前的姓和名的形式查看用戶對象。這工作正常。
控制器看起來是這樣的:
@Controller
@RequestMapping(value = "/account/settings/change-name")
@SessionAttributes("changeNameCommand")
public class ChangeNameController {
@ModelAttribute("changeNameCommand")
public ChangeNameCommand getCommand() {
return new ChangeNameCommand();
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getChangeNamePage(HttpServletRequest req) {
ModelAndView mav = new ModelAndView("Account.ChangeName");
mav.addObject("page_title", "Change Name");
return mav;
}
@RequestMapping(method = RequestMethod.POST)
public String doChangeName(
@ModelAttribute("changeNameCommand")
@Valid ChangeNameCommand command,
BindingResult result, SessionStatus status) {
if (result.hasErrors()) {
return "redirect:/account/settings/change-name";
}
// Code here to persist updated user first and last name to database...
status.setComplete();
return "redirect:/home";
}
}
我使用Tiles 2.1.2撰寫頁面和Urlrewrite 3.1.0,幫助形成友好的URL。
的ChangeNameCommand類看起來是這樣的:
import org.hibernate.validator.constraints.NotEmpty;
public class ChangeNameCommand {
@NotEmpty(message = "You must provide a first name.")
private String firstName;
@NotEmpty(message = "You must provide a last name.")
private String lastName;
@NotEmpty(message = "Your password is required to make changes.")
private String currentPassword;
// Getters and setters here...
}
調試時,我看到,當沒有對第一個或最後一個名字輸入BindingResult實例確實包含錯誤。我擔心的是在發生錯誤時重定向。我在這裏看到其他問題,只是返回視圖名稱而不是使用重定向:前綴。我試過,但(我認爲),因爲我使用Urlrewrite的方式和我的servlet映射設置的方式Spring返回一個錯誤。我已經嘗試過返回
/account/settings/change-name
/web/account/settings/change-name
/mywebsite/web/account/settings/change-name
但無濟於事。 FWIW,這裏是我的servlet映射:
<servlet-mapping>
<servlet-name>mywebsite</servlet-name>
<url-pattern>/web/*</url-pattern>
</servlet-mapping>
任何幫助非常感謝!
感謝Bozho。我如何更改我的代碼以在會話中存儲數據?我認爲這種情況已經發生,但顯然不是。謝謝! – richever 2010-10-03 18:52:14