3

我有一个控制器,它有多个动作和相应的@modelattribute 方法。其中一个方法输出是下一个方法的输入。然而,价值从未被设定。调试的时候发现调用方法的顺序不是我想的那样。它是否与命令名称 @ModelAttribute("nominationCommand") 或方法名称有关。是什么驱动了这个?

@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) {

我需要按照上面列出的顺序调用这些方法。但是在第二种方法之前调用了第三种方法。需要你的帮助。

4

1 回答 1

5

Spring 使用 Java 反射来获取方法列表。在大多数情况下,就 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
}
于 2013-02-28T17:05:25.347 回答