首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringMVC & @ModelAttribute特性

SpringMVC & @ModelAttribute特性
EN

Stack Overflow用户
提问于 2011-09-04 04:27:56
回答 3查看 2K关注 0票数 2

使用Spring/SpringMVC 3.0.5,我在控制器中定义了如下方法:

代码语言:javascript
复制
@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看起来像:

代码语言:javascript
复制
<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对象吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-20 14:34:59

我尝试过许多不同的方法,包括对有效注释和ModelAttribute注释进行重新排序,这似乎没有什么区别。

在阅读Pat在注释中建议的文档时,它确实引用了存储VO的特殊上下文。不管怎么说,如果你在尝试类似的东西,我建议你用一种不同的方式去做

票数 0
EN

Stack Overflow用户

发布于 2011-09-08 10:36:26

维尔德。同样的事情也适用于我。我看到的唯一不同是有效的顺序和ModelAttribute,你能试着逆转有效和ModelAttribute的顺序吗?

代码语言:javascript
复制
public ModelAndView saveFoo(...
   @Valid @ModelAttribute("vo") DescriptionBuilderVO vo, BindingResult result) {
}

顺便问一下,你用的是哪种版本的弹簧?

票数 1
EN

Stack Overflow用户

发布于 2013-07-14 08:12:20

尝试将对象命名为"descriptionBuilderVO",如下所示:

代码语言:javascript
复制
@Valid @ModelAttribute("descriptionBuilderVO") DescriptionBuilderVO descriptionBuilderVO, 
BindingResult result)

我知道不应该这样,但是当对象的名称与类名不同时,我发现了一些问题。

请注意,您还必须更改jsp中对象的名称:

代码语言:javascript
复制
<form:form commandName="descriptionBuilderVO" 

...etc...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7297418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档