RichFaces 4.5 - a4j: commandButton: oncomplete не запущен - PullRequest
0 голосов
/ 01 марта 2019

После перехода с JSF 2.1 / RichFaces 4.3.0 на JSF 2.2 / RichFaces 4.5.17. Наконец, я заметил, что событие oncomplete больше не перехватывается моими кнопками типа a4j: commandButton.Сервер: JBoss EAP 7.0.2.Final

Вот простая тестовая страница, которую я сделал:

<h:body>

    <h:form id="testForm">
        <a4j:commandButton 
            id="doTest" 
            onclick="alert('onclick');"
            onbeforedomupdate="alert('onbeforedomupdate');"
            oncomplete="alert('oncomplete');"
            value="TEST"
            action="#{a4jCommandButtonTester.doSomething()}" execute="@this"
            render="@none" limitRender="true"
        />

        <a4j:log mode="popup" level="debug" />
    </h:form>

</h:body>

Вызов этого простого метода:

@Named
public class A4jCommandButtonTester {

    public String doSomething() {
        System.out.println("Doing something");
        return "something";
    }

}

Результат:

  • Я вижу предупреждение «onclick»
  • Но я не вижу предупреждений «onbeforedomupdate» или «oncomplete»
  • Пока я вижу вВ журналах мой метод bean вызывается методом doSomething
  • И я также вижу, что страница получает события oncomplete и onbeforedomupdate.

a4j: log результаты:

debug[12:16:56.266]: New request added to queue. Queue requestGroupingId changed to testForm:doTest
debug[12:16:56.266]: Queue will wait 0ms before submit
debug[12:16:56.268]: richfaces.queue: will submit request NOW
info [12:16:56.268]: Received 'begin' event from <input id=testForm:doTest ...>
info [12:16:56.304]: Received 'beforedomupdate' event from <input id=testForm:doTest ...>
debug[12:16:56.305]: Server returned responseText: <?xml version='1.0' encoding='UTF-8'?> <partial-response id="j_id1"><changes><update id="j_id1:javax.faces.ViewState:0"><![CDATA[256733305988132353:-1254866772301146127]]></update></changes></partial-response>
info [12:16:56.307]: Listing content of response changes element:
Element update for id=j_id1:javax.faces.ViewState:0
<update id="j_id1:javax.faces.ViewState:0"><![CDATA[256733305988132353:-1254866772301146127]]></update>
debug[12:16:56.309]: richfaces.queue: ajax submit successfull
debug[12:16:56.309]: richfaces.queue: Nothing to submit
info [12:16:56.310]: Received 'success' event from <input id=testForm:doTest ...>
info [12:16:56.311]: Received 'complete' event from <input id=testForm:doTest ...>

Мой вопрос: почему эти события не перехватываются a4j: commandButton?Как заставить это работать?

Примечание: Если я это укажу:

<h:outputScript>
    jQuery(document).ready(function() {
        jQuery(document).on('ajaxcomplete', function(event) {
            alert('ajaxcomplete');
            console.log(event);
            console.log(event.target);
            console.log(event.currentTarget.activeElement);
        });
    });
</h:outputScript>

Я получаю цель события: это форма ... И event.currentTarget.activeElement ведет ккнопка ... но мне было бы сложно использовать эту информацию для создания «обходного пути».

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 12 марта 2019

Наконец-то обнаружен источник проблемы.

Я использую этот слушатель фазы из OmniFaces: org.omnifaces.eventlistener.ResetInputAjaxActionListener

Но из того, что я прочитал на сайте OmniFaces, длямиграция JSF 2.2, я должен был перейти с OmniFaces 1.x на 2.x (чего я не делал):

OmniFaces 2.x требует Java 1.7, JSF 2.2, EL 2.2, Servlet3.0, CDI 1.1, WS 1.1

Затем я обновляю версию зависимости до OmniFaces до 2.7, и теперь она работает, как чудо.

...