使用Spring/SpringMVC 3.0.5,我在控制器中定义了如下方法:
@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看起来像:
<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对象吗?
发布于 2011-10-20 14:34:59
我尝试过许多不同的方法,包括对有效注释和ModelAttribute注释进行重新排序,这似乎没有什么区别。
在阅读Pat在注释中建议的文档时,它确实引用了存储VO的特殊上下文。不管怎么说,如果你在尝试类似的东西,我建议你用一种不同的方式去做
发布于 2011-09-08 10:36:26
维尔德。同样的事情也适用于我。我看到的唯一不同是有效的顺序和ModelAttribute,你能试着逆转有效和ModelAttribute的顺序吗?
public ModelAndView saveFoo(...
@Valid @ModelAttribute("vo") DescriptionBuilderVO vo, BindingResult result) {
}顺便问一下,你用的是哪种版本的弹簧?
发布于 2013-07-14 08:12:20
尝试将对象命名为"descriptionBuilderVO",如下所示:
@Valid @ModelAttribute("descriptionBuilderVO") DescriptionBuilderVO descriptionBuilderVO,
BindingResult result)我知道不应该这样,但是当对象的名称与类名不同时,我发现了一些问题。
请注意,您还必须更改jsp中对象的名称:
<form:form commandName="descriptionBuilderVO" ...etc...
https://stackoverflow.com/questions/7297418
复制相似问题