Обновление зоны внутри формы в Tapestry 5

У меня есть Zone внутри Form, Zone обновляется блоком, содержащим поля ввода, которые я хотел бы связать с родительским 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>

Есть ли способ сделать привязку, и если нет, то какие есть другие альтернативы?


person ponzao    schedule 03.06.2010    source источник


Ответы (1)


Этот ответ устарел, вы можете добавлять элементы формы, используя обычные функции зоны из Tapestry. 5.2 в. Однако этот метод по-прежнему работает.

Оригинальный ответ, действительный для Tapestry 5.0 и 5.1:

FormInjector позволяет добавлять элементы формы в существующую форму. Однако вам придется написать некоторый собственный JS для запуска инъекции формы.

В вашем TML:

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

Вы можете запустить инъекцию в своем JS-коде следующим образом:

$('theClientIdOfMyFormInjector').trigger();

Вы можете найти инжектор DIV внутри вашей формы по имени его класса (myForm.down('div.t-forminjector')).

Класс компонента:

@Inject
private Block formFieldsBlock;

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