2011-03-28 88 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或更高版本的可能。

相關問題