在Tapestry 5中更新表单内的区域

时间:2010-06-03 14:13:47

标签: java ajax tapestry

我在Zone内有一个FormZone更新了一个包含输入字段的块,我希望将其绑定到父Form。不幸的是,这似乎并不像我希望的那样容易,因为我收到以下错误消息。

The Description component must be enclosed by a Form component. [at classpath:...Page.tml, line 100]

.tml的简化版本如下所示。

<t:form t:id="editForm" t:context="item.id">
    <table>
        <tr>
            <th>Name</th>
            <td><t:textField value="item.name"/></td>
        </tr>
        <t:block t:id="block">
            <tr class="person">
                <th>Description</th>
                <td><t:textField t:id="description" value="item.description"/></td>
            </tr>
         </t:block>
         <t:zone t:id="itemZone" id="itemZone"/>
         <t:actionlink t:id="item" zone="itemZone">Click me!</t:actionlink>
    </table>
</t:form>

有没有办法进行绑定,如果没有其他替代方案呢?

1 个答案:

答案 0 :(得分:4)

此答案已过时,您可以使用常用的区域功能from Tapestry 5.2 on添加表单元素。不过,这种方法仍然有效。

原始答案,对Tapestry 5.0和5.1有效:

FormInjector组件允许您将表单元素添加到exising表单中。但是,您必须编写一些自定义JS来触发表单注入。

在你的TML中:

<div t:type="FormInjector" t:id="injector" position="below" />

您可以在JS代码中触发注入:

$('theClientIdOfMyFormInjector').trigger();

您可以通过类名(myForm.down('div.t-forminjector'))找到表单中的注入器DIV。

组件类:

@Inject
private Block formFieldsBlock;

@OnEvent(component = "injector")
Block loadExtraFormFields() {
    return this.formFieldsBlock;
}