Производительность AjaxFormValidatingBehavior и потеря фокуса на Firefox

В моем проекте используется AjaxFormValidatingBehavior от Wicket для автоматического сохранения содержимого формы в Session в форме с несколькими вкладками и древовидным меню (на отдельных вкладках нет кнопки сохранения, хотя есть кнопка «Сохранить», кнопка, которая фактически отправляет форму, запускает проверки и сохраняет содержимое в базу данных). Я столкнулся с несколькими проблемами:

  1. Поскольку поведение добавляется к событию onChange всех компонентов формы, каждый раз, когда пользователь перемещается из одного поля в другое, происходит отключение сервера. Я знаю, что для предотвращения этого можно указать продолжительность дросселирования, но в моем случае это невозможно установить, поскольку мои формы имеют разную длину/сложность, многие компоненты генерируются динамически (включая древовидное меню). Но есть ли более элегантное решение для автоматического сохранения содержимого формы (у которого нет кнопки отправки), а не это раздражающее решение.

  2. Еще одна проблема, с которой я сталкиваюсь, заключается в том, что после события onChange в Firefox компонент теряет фокус после завершения «отключения сервера». Хотя на IE7 работает нормально.


person Dchucks    schedule 14.05.2012    source источник


Ответы (1)


Для первого вопроса, я думаю, вам нужно добавить средство конвейерной обработки, в ваших компонентах onchange вызвать функцию javascript, которая вызывает ваше веб-приложение. Вы можете включить функцию, аналогичную той, которая предоставляется с длительностью дросселирования, но для всей страницы (задерживать каждый вызов и запускать только последний, например, если он старше x миллисекунд).

Для второго, я думаю, вы должны использовать AjaxRequestTarget#focusComponent в своем поведении или обрабатывать эту вещь в своей «обертке», как описано в первом ответе.

person Cedric Gatay    schedule 15.05.2012
comment
Обычно вы не должны терять фокус, если только вы не обновляете компонент, на который только что сфокусировался пользователь. Я действительно не уверен, почему это будет работать в IE7, хотя - person Thorsten Wendelmuth; 15.05.2012