4

所以我的命令对象有一个public Map<ProductVO, String> availableProducts;,它将网站的各种产品/服务作为键,将用户希望购买的数量作为值。当然也提供了普通的 getter/setter。

此地图被实例化(作为 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>

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

然而,在字段中输入一些数字并点击提交后,我检查了命令对象,看起来地图值没有更新,它们仍然是“0”。

我可能path="${availableProductEntry.value}"弄错了部分。

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

4

2 回答 2

2

你实际上需要使用这个:

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

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

于 2012-10-18T14:28:39.347 回答
0

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

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

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

于 2012-10-18T10:33:16.140 回答