Jsf 2 <;p:blockUI>;不响应<;h:命令按钮>&书信电报;f:ajax>;

Jsf 2 <;p:blockUI>;不响应<;h:命令按钮>&书信电报;f:ajax>;,jsf-2,primefaces,commandbutton,blockui,Jsf 2,Primefaces,Commandbutton,Blockui,我得到了一个的仅侦听PrimeFaces/jQuery特定的pfAjaxSend和pfAjaxComplete事件。这些事件由所有PrimeFaces ajax组件触发,但不是由标准JSF触发 您有3种选择: 用替换,让发送PF/jQuery ajax请求,而不是标准的JSF请求 <h:commandButton id="login" value="Login" action="#{bean.login}"> <p:ajax process="@form" update

我得到了一个
仅侦听PrimeFaces/jQuery特定的
pfAjaxSend
pfAjaxComplete
事件。这些事件由所有PrimeFaces ajax组件触发,但不是由标准JSF
触发

您有3种选择:

  • 替换
    ,让
    发送PF/jQuery ajax请求,而不是标准的JSF请求

    <h:commandButton id="login" value="Login" action="#{bean.login}">
        <p:ajax process="@form" update="@form" />
    </h:commandButton>
    
    但可能会有一些不想要的副作用


  • 事件期间手动触发特定的

    <f:ajax ... onevent="triggerBlockUI" />
    ...
    <p:blockUI widgetVar="widgetBlockUI" ... />
    


  • 不用说,选项1是最简单的选择。

    试试p:commandlink。我在h:commandlink上也遇到了同样的问题,问题得到了解决

    您是否尝试了使用
    p:ajax
    h:commandButton
    ?哦,我错过了您的评论。请参阅已接受的答案。:)是的,我已经注意到了
    jsf.ajax.addOnEvent(function(data) {
        if (data.status === "begin") {
            $(document).trigger("pfAjaxSend", [null, data]);
        }
        else if (data.status === "success") {
            $(document).trigger("pfAjaxComplete", [null, data]);
        }
    });
    
    <f:ajax ... onevent="triggerBlockUI" />
    ...
    <p:blockUI widgetVar="widgetBlockUI" ... />
    
    function triggerBlockUI(data) {
        if (data.status === "begin") {
            PF("widgetBlockUI").show();
        }
        else if (data.status === "success") {
            PF("widgetBlockUI").hide();
        }
    }