1
我正在尝试使用Spring @MVC 3.0创建表单。这种形式应该让用户更新汤的味道,但我遇到了一些问题。以下是我的相关模型类(假设所有的getter和setter方法是否有):为什么Spring @ MVC窗体中的对象的其他属性变为空?
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
怎么回事?为什么没有绑定对象的其余数据?