2011-03-28 78 views
3

我想知道是否有可能通过@ModelAttribute注释但未请求映射的方法使用@ModelAttribute方法在方法签名中使用另一个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第二批注的方法......作为第一个注释的方法不是由第二个叫......

干杯

+0

for getAttrTwo()为什么你需要传递attrOne?你不能只是进行相同的服务调用,或者可能缓存服务调用的结果? – 2011-03-28 20:47:39

+0

更多解释:我想在一个超类控制器中有这两个,但是覆盖扩展控制器的第一个方法.... – n99 2011-03-29 18:59:34

回答

3

我遇到同样的通过从弹簧机制的文档学习状况:

@ModelAttribute也用于在方法级别[..]。对于这种用法,方法签名可以包含与以上针对@RequestMapping注释所记录的类型相同的类型。

我发现SPR-6299面对这个问题。在评论,你可以找到提供只有一个 @ModelAttribute注解的方法,设置属性纳入模型解决方法:

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

根据SPR-6299,这将在Spring 4.1 RC1或更高版本的可能。

相关问题