Как использовать проверку формы в форме с атрибутом зоны?

У меня большая проблема с Tapestry 5.3.6..

У меня есть форма с пользовательскими простыми миксинами, которые подразумевают, что идентификаторы формы не могут быть изменены:/

Итак, у меня есть это:

<form t:type="form" t:id="formId" t:mixins="aMixins" t:zone="zoneID">
    <t:errors/>
    <input t:type="TextField"/>
    <a t:type="LinkSubmit" t:id="linkId"/>
</form>

<t:zone t:id="zoneID">
      Something....
</t:type>

Когда я использую атрибут формы зоны, ошибки проверки не отображаются, как я могу сделать так, чтобы ошибки проверки отображали ошибки без включения формы в зону?

Я не могу включить эту форму в зону, потому что, когда мой миксин инициализируется, он помещает некоторых слушателей в некоторые элементы DOM, и когда я отправляю свою форму, форма перезагружается (из-за зоны) и также перезагружается миксин, который добавляет еще один слушатель для новых элементов DOM, и после отправки запускается событие, которое перехватывается соответствующими слушателями, но некоторые из слушателей связаны с несуществующими элементами и сбоем js.

Большое спасибо за ваши ответы


person BlackMario    schedule 17.04.2013    source источник
comment
если вы используете фиксированный идентификатор для параметра зоны формы, вы также должны определить фиксированный идентификатор для зоны: <t:zone t:id="zoneID" id="zoneID">   -  person sody    schedule 18.04.2013
comment
Это не решает мою проблему :/   -  person BlackMario    schedule 18.04.2013


Ответы (1)


1 .

У меня есть форма с пользовательскими простыми миксинами, которые подразумевают, что идентификаторы формы не могут быть изменены

Это не подразумевается. Может быть, это ваше требование?

Если нет, то чтобы подключить ваш миксин к рендерингу ajax, вам нужно сделать миксин немного более гибким.

В классе YourMixin:

@InjectContainer
private ClientElement element;

void afterRender() {

    String elementId = element.getClientId();

    JSONObject spec = new JSONObject();
    spec.put("elementId", elementId);

    jsSupport.addScript("new MixinHandler(%s)", spec.toString());
}

Это всего лишь подсказка, взгляните на реализацию автозаполнения (класс, javascript) для полного примера.

2 .

Когда я использую атрибут формы зоны, проверка не работает

Это звучит сомнительно. Я думаю, ошибки проверки не видны, потому что вы не обновляете саму форму и ее тег <t:errors/>.

Это можно проверить, если установить точки останова в обработчиках событий FAILURE и SUCCESS формы на вашей странице (см. org.apache.tapestry5.EventConstants).

person Vitaly    schedule 17.04.2013
comment
Это настоящая проблема, извините, я француз: / проверка работает, но я не могу отобразить компонент ошибки, потому что обновляется только зона, я не знаю, может ли сделать миксин более гибким, решить мою проблему, потому что когда форма загружается миксин инициализирует себя и связывает какое-то событие javascript, и когда я отправляю форму, миксин инициализирует себя еще раз и связывается с теми же событиями, и после успешной отправки событие запускается и перехватывается двумя слушателями, и один из этих слушателей связан с элементом, которого больше не существует, я обновляю свой первый пост, чтобы уточнить мою проблему - person BlackMario; 18.04.2013
comment
Я думаю, было бы лучше включить обновление, не касающееся начальной части, потому что мой ответ сейчас звучит неуместно. Попробуйте просмотреть javascript tapestry5, чтобы узнать, есть ли какое-то событие javascript, которое запускается перед отправкой запроса ajax - там вы можете попробовать отменить регистрацию текущего слушателей, которые устареют. - person Vitaly; 18.04.2013
comment
Я думаю, это оно: Tapestry.FORM_PROCESS_SUBMIT_EVENT: "tapestry:formprocesssubmit" - person Vitaly; 18.04.2013