Spring在视图中创建集合

时间:2014-05-27 19:54:11

标签: java spring spring-mvc view converter

View

假设我们的视图获得了数据库中所有“Ingrediënt”的列表,我们现在想要将数量信息添加到每个配料中。

逻辑:

IngredientQuantity:

  • 成分:成分
  • 数量:数量

数量:

  • 字符串:单位
  • int:数量

成分:

  • 字符串:名称

菜:

  • 收藏品:成分
  • 字符串:名称

问题:

我们如何将每个选定成分的输入结合到成分量表列表中。我们只希望我们的列表包含选定的成分。

注释 Quantity有一个String unit和一个Int quantity字段

附加。 我正在考虑使用自定义转换器,但不知道如何做到这一点。

1 个答案:

答案 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