循环提交上下文

pst*_*ton 3 tapestry

我遇到以下代码的问题:

<t:form t:id="locationsForm" t:zone="myZone">
    <t:loop t:source="locations" t:value="location" t:encoder="locationEncoder">
        <t:textfield t:value="location.name" />
        <t:submit t:event="RemoveLocation" t:value="remove ${location.hashCode()}" t:context="${location.hashCode()}" />
    </t:loop>
    <t:submit t:value="save" />
</t:form>
Run Code Online (Sandbox Code Playgroud)

说我最终得到以下按钮:

<input type="submit" name="button" id="button" value="remove 12339020">
<input type="submit" name="button" id="button" value="remove 2504658">
Run Code Online (Sandbox Code Playgroud)

单击任一按钮将仅触发onRemoveLocation具有上下文的事件2504658.

我猜第二个提交组件覆盖了第一个提交的事件处理程序,因此它们最终都调用了第二个组件事件处理程序.

我试过设置clientId一些独特的东西,但没有帮助.

我需要删除按钮来提交相同的表单,因为用户可能会更新一个元素的名称并在同一操作中删除第二个元素.

建议表示赞赏,p.

(Tapestry 5.1.0.5)

Hen*_*ing 6

Submit带有上下文的循环内部使用时,您还需要设置defer="false"为避免此行为:

<t:submit t:event="RemoveLocation" t:value="remove ${location.hashCode()}"
    t:context="${location.hashCode()}" t:defer="false" />
Run Code Online (Sandbox Code Playgroud)

来自文档:

defer:如果为true(默认值),则组件发送的任何通知都将延迟到表单提交结束(这通常是合乎需要的).通常,除非提交组件在循环内呈现,否则这可以保留为默认值,在这种情况下,应将延迟绑定为false(否则,事件上下文将始终是循环的最终值).