Spring / JSTL:如何遍历地图并将输入字段绑定到值?

时间:2012-10-18 10:27:49

标签: java spring jstl spring-webflow

所以我的命令对象有一个public Map<ProductVO, String> availableProducts;,它将网站的各种产品/服务保存为密钥和用户希望购买的金额作为值。当然提供正常的吸气剂/设定器。

此地图被实例化(作为HashMap),并在设置步骤中填充来自我们数据库的所有产品,并且所有值最初都设置为“0”。

在jsp中,我有一个表来连续显示每个产品,每行包含product.description,product.price,然后是一个输入字段,用户可以在其中输入他们想要的产品数量或者只是离开它为零(不要担心非数字验证,将在其他地方处理)。

我的JSTL foreach看起来像这样;

<c:forEach var="availableProductEntry" items="${credit.availableProducts}">
    <c:set var="product" value="${availableProductEntry.key}" />
    <tr>
        <td>${product.description}</td>
        <td>${product.price}"</td>
        <td><form:input path="${availableProductEntry.value}" /></td>
    </tr>
</c:forEach>

这适用于显示,即表格显示我想要的方式,所有产品都经过迭代和显示,描述,价格和字段的初始值都是正确的。

然而,当在字段中放入一些数字并点击提交时,我检查命令对象并且看起来不像Map值已经更新,它们仍然是“0”。

我可能错误地发现了path="${availableProductEntry.value}"部分。

有没有办法让动态生成的输入字段更新他们最初从中提取值的Map值?

2 个答案:

答案 0 :(得分:2)

你实际上需要使用它:

<form:input path="availableProducts[${product}]" />

当然,如果您的命令对象是“信用”,这听起来像是来自您的帖子

答案 1 :(得分:0)

我相信你需要使用这样的东西:

<form:input path="${availableProductEntry[product]}" />

您需要符合JavaBeans命名约定(因此getBean()和setBean()),因此您不能像使用Map那样使用Map。