<p:blockui>没有响应<h:commandbutton> <f:ajax> </f:ajax> </h:commandbutton> </p:blockui>

时间:2015-04-16 18:36:23

标签: jsf-2 primefaces commandbutton blockui

我有一个<h:commandButton喜欢:

<h:commandButton id="login"
  actionListener="#{bean.login}" value="Login"
  styleClass="btn btn-primary btn-sm">
   <f:ajax execute="@form" render="@form"/>
</h:commandButton>

<p:blockUI id="block" block=":form" trigger="login" />

它不起作用。该块永远不会显示出来。

它适用于<p:commandButton>

如何使用<h:commandbutton>实现目标。如果那是不可能的:有没有解决办法?

2 个答案:

答案 0 :(得分:6)

<p:blockUI>仅侦听PrimeFaces / jQuery特定的pfAjaxSendpfAjaxComplete事件。这些事件由所有PrimeFaces ajax组件触发,但不是由标准JSF <f:ajax>触发。

您有3个选项:

  1. <f:ajax>替换为<p:ajax>,让<h:commandButton>发送PF / jQuery ajax请求,而不是标准的JSF请求。

    <h:commandButton id="login" value="Login" action="#{bean.login}">
        <p:ajax process="@form" update="@form" />
    </h:commandButton>
    

    (注意:仔细阅读Differences between action and actionListener


  2. <f:ajax>上附加一个全局侦听器,自动触发PF / jQuery特定事件。

    jsf.ajax.addOnEvent(function(data) {
        if (data.status === "begin") {
            $(document).trigger("pfAjaxSend", [null, data]);
        }
        else if (data.status === "success") {
            $(document).trigger("pfAjaxComplete", [null, data]);
        }
    });
    

    但是可能会有一些不良的副作用。


  3. <p:blockUI>个活动期间手动触发特定<f:ajax>

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

    使用这个JS函数。

    function triggerBlockUI(data) {
        if (data.status === "begin") {
            PF("widgetBlockUI").show();
        }
        else if (data.status === "success") {
            PF("widgetBlockUI").hide();
        }
    }
    

  4. 毋庸置疑,选项1是最直接的选择。

答案 1 :(得分:0)

尝试p:commandlink而不是。我对h:commandlink及其已解决的问题有同样的问题