Я пытаюсь создать форму, используя 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
Что происходит не так?Почему остальные данные об объекте не связаны?