假设我们的视图获得了数据库中所有“Ingrediënt”的列表,我们现在想要将数量信息添加到每个配料中。
IngredientQuantity:
数量:
成分:
菜:
我们如何将每个选定成分的输入结合到成分量表列表中。我们只希望我们的列表包含选定的成分。
注释
Quantity
有一个String unit
和一个Int quantity
字段
附加。 我正在考虑使用自定义转换器,但不知道如何做到这一点。
答案 0 :(得分:1)
您不需要Converter
。转换器用于高级类型转换,例如将传入的字符串' yyyy-mm-dd zone' 转换为java.util.Date
,反之亦然。
Spring提供JSTL tags library将modelAttribute附加到<form>
及其字段。
您还可以在<form>
附加一份IngredientQuantity列表,并且有很多关于如何在<form>
内使用列表的教程。
一个这样的例子是here
<强>更新强>
在您的情况下,您将在控制器设置方法中将Dish和一个空的IngredientQuantity列表添加到模型中,如下所示
class IngredientFormModel{
//It is important to use AutoPopulatingList as your list is dynamic
AutoPopulatingList<IngredientQuantity> ingredientQuantityList = new AutoPopulatingList<IngredientQuantity>(IngredientQuantity.class);
}
@RequestMapping(method=RequestMethod.GET)
public String setupForm(Model model) {
model.addAttribute("dish", dish);
IngredientFormModel ingredientFormModel = new IngredientFormModel();
model.addAttribute("ingredientFormModel", ingredientFormModel)
return "viewName";
}
将您的ingredientFormModel附加到<form>
并使用.
运算符访问嵌套字段
(注意:您可以在JSP中访问dish作为requestScope中的常规属性)
<form:form modelAttribute="ingredientFormModel">
Dish Name: ${dish.name} <br>
<c:forEach var="ingredient" items="${dish.ingredients}" varStatus="count">
Ingredient Name: ${ingredient.name} <br>
<input type="hidden" name="ingredientFormModel.ingredientQuantityList[${count.index}].name" value="${ingredient.name}" />
Quantity: <input name="ingredientFormModel.ingredientQuantityList[${count.index}].quantity.quantity" type="text" /> </br>
Unit: <input name="ingredientFormModel.ingredientQuantityList[${count.index}].quantity.unit" type="text"/> </br>
</c:forEach>
</form:form>
在您的控制器类中,您可以按如下方式检索对象
@ModelAttribute("ingredientFormModel") IngredientFormModel ingredientFormModel