Почему другие свойства объекта в форме Spring @MVC становятся нулевыми? - PullRequest
1 голос
/ 01 сентября 2011

Я пытаюсь создать форму, используя Spring @MVC 3.0.Предполагается, что эта форма позволит пользователю обновлять вкус супа, но я сталкиваюсь с некоторыми проблемами.Вот мои соответствующие классы моделей (предположим, что есть все геттеры и сеттеры):

public class Soup {
   String name, flavor, mainIngredient;
   public String toString() 
   {
      return "name: " + this.name + ", flavor: " 
             + this.flavor + ", main: " + this.mainIngredient;
   }
}

public class SmallMeal {
    List<Soup> soups;
}

public class Menu {
    String id;
    SmallMeal smallMeals;
}

Эта часть приложения позволяет пользователю редактировать супы.Вот контроллер:

public class MenuController {

  @RequestMapping(value="/soupForm", method = RequestMethod.GET)
  public String updateSoups(
     @PathVariable("menuId") String menuId,
     ModelMap model) 
  {
     Menu menu = // ... looked up with a DAO.
     if (menu != null)
     {
        model.addAttribute("menu", menu);
        for (Soup s : menu.getSmallMeal().getSoups())
        {
           System.out.println("soup: " + s.toString());
        }
     }
     return "soupEditor";
  }

  @RequestMapping(value="/soupForm", method = RequestMethod.POST)
  public String updateSoups(
     @ModelAttribute("menu") Menu menu,
     BindingResult result, SessionStatus status)
  {
     for (Soup s : menu.getSmallMeal().getSoups())
     {
        System.out.println("soup: " + s.toString());
     }
     return "redirect:soupUpdated";
  }

}

А вот soupForm JSP:

<form:form modelAttribute="menu">
  <c:forEach var="soup" varStatus="stat" items="${menu.smallMeal.soups}">
     <label>${soup.name} flavor</label>
     <form:input path="smallMeal.soups[${stat.index}].flavor" />
  </c:forEach>
</form:form>

Теперь, когда я впервые запрашиваю страницу, я получаю вывод, похожий на этот:

name: tortilla, flavor: spicy, mainIngredient: tortillas
name: crab bisque, flavor: crab, mainIngredient: crab

И после отправки формы (после обновления аромата для tortilla) я получу вывод, похожий на:

name: null, flavor: delicious, mainIngredient: null
name: null, flavor: null, mainIngredient: null

Что происходит не так?Почему остальные данные об объекте не связаны?

1 Ответ

3 голосов
/ 07 сентября 2011

Оказывается, что аннотацией @SessionAttributes был ответ.

@Controller
@SessionAttributes("menu")
public class MenuController { 

  /* ... */

}

После того, как это было добавлено, данные, существующие в настоящее время на объекте, сохранились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...