3

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

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

下面是详细的设置:

创建 bean 的 Web 流启动:

<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;
    }
    ...
}

我的 Web 流程中有一系列视图状态,其中设置了简单的字符串或数字字段绑定,这些绑定设置已初始化、显示和保存,不会对表单产生任何问题。

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

<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

这是下一个按钮的相关 Web 流程条目。

<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 框架 3.1.1

Spring-Webflow 2.3.1

雄猫 6.0.18

日蚀靛蓝

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

4

0 回答 0