使用Spring/3.0.5用SpringMVC我定義的方法在我的控制器是這樣的:和用SpringMVC特點@ModelAttribute
@RequestMapping(params = { "save","!delete" }, method = RequestMethod.POST)
public ModelAndView saveFoo(...
@ModelAttribute("vo") @Valid DescriptionBuilderVO vo, BindingResult result) {
...
result.rejectValue("foo.sequenceNumber", "foo.builder", new Object[]{vo.getFoo().getSequenceNumber()}, "Sequence Number too high"); vo.getFoo().setSequenceNumber(originalNumber);
return new ModelAndView(WebConstants.VIEW_BUILDER, "vo", vo);
請注意,我試圖在裏面的VO對象設置的值控制器。有趣的是,如果我用@ModelAttribute來做這個,新的值不會顯示出來。如果我從方法合約中刪除@ModelAttribute,則新值將與您的想法完全相同。問題出現在出現錯誤時,獲取錯誤的唯一方法是在合同中使用@ModelAttribute。
順便說一句我的HTML看起來像:
HTML
<form:input path="foo.sequenceNumber" id="sequenceNumber" size="4" maxlength="4"/>
<form:errors path="foo.sequenceNumber" cssClass="ui-state-error" />
foo.sequenceNumber = the value the user typed in; when I use @ModelAttribute
foo.sequenceNumber = the value I set in the controller; but I lose any errors
這在我看來,用SpringMVC是放的ModelAttribute VO成一個「特殊」的地方,其傳遞迴JSP,但不在一個明顯的位置。有沒有人知道我在這種情況下如何獲得VO對象?
你有沒有嘗試添加'@SessionAttributes(「沃」 )'作爲控制器類的註釋? – Pat
感謝您的回覆。這可能會給我一些我可以使用的東西,但我試圖在更多的架構層面上弄清楚發生了什麼。它或者是春天的一個特點,一個錯誤,或者也許是我自己的無知? – kasdega
你有@RequestMapping類或saveFoo方法的批註嗎? –