Вопрос по jsf-2, jquery – Как обрабатывается AJAX-запрос в JSF 2.0?

2

Я пытался что-то вроде ниже -

<code><h:commandButton id="btnOK">
     <f:ajax event="action" execute="@this" render="idHeader"       
listener="#{myBean.actionSubmit()}"/>
</h:commandButton>
</code>

И я хочу, чтобы после завершения этого ajax-запроса была выполнена некоторая обработка в пользовательском интерфейсе. Для этого я использую следующий код jQuery:

<code>$(document).ajaxComplete(function() {
    $.modal.close();
});
</code>

Но моя проблема в том, что метод jQuery не запускается вообще. Мне интересно, запускает ли ajax-представление JSF событие ajaxComplete или нет ??

У меня были некоторые проблемы с этим «успехом» в моей функции JavaScript. Кажется, что каждый браузер, кроме IE, не имеет проблем и повторно визуализирует компонент после того, как он возвращает состояние успеха. IE, хотя повторно отображает ПОСЛЕ возвращения состояния успеха. Это определенно проблема, если вы пытаетесь манипулировать чем-то в повторно визуализированном компоненте из вашего javascript. Любой другой браузер работает отлично, хотя ... Мне еще предстоит обойти эту проблему с IE. james

Ваш Ответ

2   ответа
4

ов. JSF использует собственный внутренний API, который вы можете найти в автоматически включенномjsf.js файл. Так что JQueryjQuery.ajaxComplete() никогда не вызывается. Он будет вызываться только когда jQuery's$.ajax() (и его ярлыки$.get(), $.post() и т. д.) используется. Их используют только библиотеки компонентов на основе jQuery, такие как PrimeFaces с<p:commandXxx> а также<p:ajax>. Для стандартного JSF<f:ajax>, вам нужно использовать собственный JSFjsf.ajax.addOnEvent()место этого @ handler илиonevent атрибут<f:ajax>.

В ваш частный случай Я думаюonevent Атрибут Моисей легко:

<f:ajax ... onevent="btnOKhandler" />

function btnOKhandler(data) {
    if (data.status == 'success') {
        $.modal.close();
    }
}

Thedata.status может иметь 3 значения:begin, complete а такжеsuccess. Смотрите также таблицы 14-4 и 14 JSF спецификация.

Смотрите также JavaScript на (до и после) каждого Ajax-вызова
0

RichFaces.jQuery(document).on( 'ajaxcomplete', function(event, xhr, settings){   
     console.log(event, xhr, settings);
      // event, undefined, undefined
})
Это для RichFaces, а не для простого JSF! Kukeltje

Похожие вопросы