2013-02-28 72 views
3

我有一個控制器,它有多個動作和相應的@modelattribute方法。其中一種方法輸出是下一個方法的輸入。然而,價值從未設置。當我調試時,我發現調用方法的順序並不是我所期望的。它無論如何都與命令名稱@ModelAttribute(「nominationCommand」)或方法名稱有關。這是什麼驅動的?Spring - 使用多動作控制器調用@modelattribute方法的順序

@ModelAttribute("awardCommand") 
public AwardCommand getAwardList(HttpServletRequest request, HttpSession session, Model model) { 

@ModelAttribute("associateDetails") 
public List<AssociateDetailsCommand> getAssociateList (HttpServletRequest request, HttpSession session, Model model) { 

@ModelAttribute("achievementCommand") 
public AchievementDetailsCommand getAchievementDetails(HttpServletRequest request, Model model) { 

@ModelAttribute("departmentCommand") 
public List<DepartmentCommand> getDepartmentList(HttpServletRequest request,HttpSession session, Model model) { 

我需要按照上面列出的順序調用方法。但是第三種方法在第二種方法之前被調用。 需要你的幫助。

回答

5

Spring正在使用Java Reflection獲取方法列表。在大多數情況下,在JDK方面它是不可預測的。

最常見的解決方法是將@ModelAttribute替換爲控制器處理程序中的對應模型。

@RequestParam("/example/view") 
public ModelAndView view(HttpServletRequest request, Model model /*probably some more parameters*/){ 
     model.put("awardCommand", getAwardCommand()); 
     model.put("achievementCommand", getAchievementCommand()); 
     ///... TODO put other 
} 
+0

這worked.Thanks – Radhika 2013-03-02 11:45:07

+0

但是,如果你有這個命令在另一個控制器這將是很好注入他們(不是靜態)使用AOP允許安全根據用戶權限的更多態行爲。問題是你無法得到它的訂單。 – EliuX 2017-11-15 00:22:39

相關問題