我有一个<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>
实现目标。如果那是不可能的:有没有解决办法?
答案 0 :(得分:6)
<p:blockUI>
仅侦听PrimeFaces / jQuery特定的pfAjaxSend
和pfAjaxComplete
事件。这些事件由所有PrimeFaces ajax组件触发,但不是由标准JSF <f:ajax>
触发。
您有3个选项:
将<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)
在<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]);
}
});
但是可能会有一些不良的副作用。
在<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();
}
}
毋庸置疑,选项1是最直接的选择。
答案 1 :(得分:0)
尝试p:commandlink而不是。我对h:commandlink及其已解决的问题有同样的问题