Collection / List属性不会在表单提交时绑定或更新

时间:2012-06-25 18:32:05

标签: spring-webflow

所以我设置了一个带有spring web流的向导界面,逐渐填充单个表单对象/模型。它适用于必须填充单个String或基本属性的前几个步骤以及一个String数组(来自复选框界面)。

然后我有一个List<String>属性。它可以正确呈现为具有正确初始值的多个文本框。但是当我在浏览器上编辑文本框并提交时,这些值不会对表单bean生效。它仍然具有初始值。

以下是详细设置:

Web flow on-start创建bean:

<on-start>
    <evaluate expression="new mypackage.MyFormBean()" result="flowScope.myFormBean" />
</on-start>

以下是我的表单bean的相关部分:

public class MyFormBean implements Serializable {
    ...
    private List<SlotBean> slots;
    ...
    public List<SlotBean> getSlots() {
        return slots;
    }
    public void setSlots(List<SlotBean> slots) {
        this.slots= slots;
    }
    ...
}

public class SlotBean {
    ...
    private int quantity;
    ...
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity= quantity;
    }
    ...
}

我的网络流程中有一系列视图状态,其中包含简单的字符串或数字字段绑定设置,可以初始化,显示和保存,而不会出现问题。

此视图状态生成任意数量的SlotBean对象,然后使用2初始化数量。这些设置为slots属性。

<view-state id="generate-criteria" model="disciplineCatalogue">
    ...
    <transition on="next" to="slots-grid">
        <evaluate expression="myService.generateSlots(myFormBean)"/>
    </transition>
    ...
</view-state>

这是jsp片段。它所做的就是渲染一堆文本框。还有一个下一个按钮:

<form:form id="slotsGrid" modelAttribute="myFormBean" action="${flowExecutionUrl}">
    ...
    <c:forEach var="slot" items="${myFormBean.slots}" varStatus="idx">
        <form:input path="slots[${idx.index}].quantity" />
    </c:forEach>
    ...
    <button type="submit" id="next" name="_eventId_next">Next</button>
    ...
</form:form>

上面的代码正确显示初始值(2)。它会生成多个文本框,如下所示:

<input id="slots0.quantity" name="slots[0].quantity" type="text" value="2"/>

因此,当此页面在浏览器上时,我将数量文本框的值更改为不同的值,然后单击“下一步”按钮。在我的浏览器的网络调试器上,我看到表单值被发送到服务器:

slots[0].quantity:3
slots[1].quantity:1
slots[2].quantity:2

以下是下一个按钮的相关网络流条目。

<view-state id="slots-grid" model="myFormBean">
    <binder>
        ...
        <binding property="slots" />
    </binder>
    ...
    <transition on="next" to="finished">
        <evaluate expression="myService.create(myFormBean)"/>
    </transition>
    ...
</view-state>

所以我在myService.create(myFormBean)方法上设置了一个断点,它显示所有数量字段仍然设置为原始“2”。新值未绑定到myFormBean.slots

你的设置中有什么东西看起来不对吗?

感谢您随时可以加入

Spring Framework 3.1.1

Spring-Webflow 2.3.1

Tomcat 6.0.18

Eclipse Indigo

交叉发布于: http://forum.springsource.org/showthread.php?127809-Collection-List-property-won-t-bind-or-update-on-form-submit

0 个答案:

没有答案