Перехватить a4j: запрос commandButton - PullRequest
3 голосов
/ 22 августа 2009

Я занимаюсь разработкой веб-приложения с использованием A4J, Richfaces. Одно из моих требований - мне нужно проверить, изменил ли пользователь какие-либо значения в форме, когда он пытается уйти со страницы.

У меня есть кнопки сохранения и отмены на странице. Я использую кнопку a4j:command для отмены функции. Нажатие на кнопку отмены должно сделать ниже вещи

  1. Проверьте, изменил ли пользователь что-либо в форме (это я делаю с помощью javascript и у меня есть флаг, если пользователь изменил какие-либо значения)
  2. Отображать окно подтверждения (подтверждение javascript со значениями «Вы действительно хотите отменить изменения - ДА НЕТ»), когда пользователь изменяет значения формы
  3. Если пользователь говорит ДА, отправьте форму, используя AJAX (используя A4J)

Мой код кнопки команды a4j такой:

<a4j:commandButton action="MyClass.cancel_action"
    onclick="checkIsPageChanged()"/>

Проблема заключается в том, что при использовании a4j:commandButton я не могу вызвать промежуточную функцию javascript (функцию, которая проверяет, обновил ли пользователь какие-либо значения и отображает окно подтверждения), а затем отправить запрос с помощью ajax. Я посмотрел на код, сгенерированный JSF, и он похож (не точный, но синтаксический)

<input type="button"
    onclick="checkIsPageChanged();AJAX.submit('')/>

Дело в том, что когда я нажимаю на кнопку, он звонит только checkIsPageChanged() и не звонит AJAX.submit().

Любой обходной путь для этого поможет мне.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 августа 2009

Чтобы быть более конкретным, мы можем использовать:

onclick="if(!isPageChanged()) {return false}" 

При возврате false запрос не будет отправлен.

3 голосов
/ 24 августа 2009

Используйте a4j:jsFunction и вызывайте его с вашего a4j:commandButton, когда checkIsPageChanged() вернет true.

например.

<a4j:commandButton action="MyClass.cancel_action"
    onclick="if(checkIsPageChanged()) { cancel(); }"/>
<a4j:jsFunction name="cancel" action="MyClass.cancel_action"/>
...