RichFaces 4.5 - a4j:commandButton:oncomplete未触发

问题描述 投票:0回答:1

从JSF 2.1 / RichFaces 4.3.0迁移到JSF 2.2 / RichFaces 4.5.17.Final后,我注意到我的按钮a4j:commandButton不再捕获oncomplete事件。服务器: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:日志结果:

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正在导致按钮...但我发现使用这些信息来构建“解决方法”很棘手。

谢谢你的帮助 !

richfaces jboss7.x jsf-2.2
1个回答
0
投票

终于找到了问题的根源。

我正在使用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,Servlet 3.0,CDI 1.1,WS 1.1

然后我将对OmniFaces的依赖版本更新为2.7,它现在​​正在作为一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.