@ModelAttribute在方法签名中使用@ModelAttribute注释方法

时间:2011-03-28 20:04:33

标签: java spring annotations

我想知道是否可以通过注释@ModelAttribute链接@ModelAttribute方法,但不是请求映射,方法在方法签名中使用另一个ModelAttribute。 这将在控制器中。

@ModelAttribute("attrOne")
public AttrOne getAttrOne() {
    return service.getAttOne();
}

@ModelAttribute("attrTwo")
public AttrTwo getAttrTwo(@ModelAttribute("attrOne") AttrOne attrOne){
    return anotherservice.getAttrTwo(attrOne);      
}

然后,如果有一个请求映射方法执行此操作:

@RequestMapping(method=RequestMethod.GET)
public String doSomething(@ModelAttribute("attrTwo") AttrTwo attrTwo )

这会有用吗?

我似乎在第二个带注释的方法中为AttrOne获取了一个空对象...因为第一个带注释的方法没有被第二个注释...

干杯

2 个答案:

答案 0 :(得分:3)

通过学习春季文档,我遇到了同样的情况:

  

@ModelAttribute也用于方法级 [..] 。对于此用法,方法签名可以包含与上面针对@RequestMapping批注记录的相同类型。

我发现SPR-6299面临这个问题。在评论中,您可以通过提供仅一个 @ModelAttribute注释方法找到解决方法,该方法将属性设置为模型:

@ModelAttribute
public void populateModel(Model model) { 
  model.addAttribute("attrOne", getAttrOne());
  model.addAttribute("attrTwo", getAttrTwo());
}

答案 1 :(得分:1)

根据SPR-6299,这可以在Spring 4.1 RC1或更高版本中实现。