отправить контекст в цикле - PullRequest
3 голосов
/ 16 мая 2011

У меня проблема со следующим кодом:

<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>

Скажем, я получаю следующие кнопки:

<input type="submit" name="button" id="button" value="remove 12339020">
<input type="submit" name="button" id="button" value="remove 2504658">

Нажатие на любую из этих кнопок только вызоветсобытие onRemoveLocation с контекстом 2504658.

Я предполагаю, что второй отправляющий компонент переопределяет обработчик события, зарегистрированный первым, поэтому они оба в конечном итоге вызывают обработчик события второго компонента.

Я попытался установить для clientId нечто уникальное, но это не помогло.

Мне нужны кнопки удаления, чтобы отправить ту же форму, поскольку пользователь может обновить имя одного элемента и удалить второйв той же операции.

Советы приветствуются, стр.

(Гобелен 5.1.0.5)

1 Ответ

6 голосов
/ 16 мая 2011

При использовании Submit внутри цикла с контекстом вам также необходимо установить defer="false", чтобы избежать этого поведения:

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

Из документов :

defer: Если true (по умолчанию), то любое уведомление, отправленное компонентом, будет отложено до конца отправки формы (это обычно желательно).В общем, это можно оставить как значение по умолчанию, за исключением случаев, когда компонент Submit выполняет рендеринг внутри Loop, и в этом случае defer должен быть привязан к false (в противном случае контекст события всегда будет конечным значением Loop).

...