隐藏所有primefaces blockui元素

时间:2015-05-14 17:05:39

标签: jsf jsf-2 primefaces blockui

我有很多.xhtml视图。其中许多都有blockui元素,例如:

    <p:blockUI block="tab" widgetVar="subscriberSelectBlocker">
    </p:blockUI>

有时每个视图中有超过1个。 要隐藏上面的blockUI,我在相应的bean SubscriberFilterBean.java中有一个方法:

public void hideSubscriberSelectBlockUi() {
    RequestContext.getCurrentInstance().execute("subscriberSelectBlocker.hide()");
}

现在问题是我需要立刻隐藏所有现有的阻塞。 我可以像上面一样单独隐藏它们,但这意味着我基本上会重复相同的代码超过15次,并且执行所有这些方法的方法将是巨大的。

有没有办法隐藏标签的所有元素? 像

这样的东西
public void hideSubscriberSelectBlockUi() {
    RequestContext.getCurrentInstance().execute("p:blockui.hide()");
}

1 个答案:

答案 0 :(得分:1)

当您在PrimeFaces元素中指定widgetVar时,将实例化JavaScript小部件对象并将其分配给窗口范围中具有指定名称的全局变量。这意味着可以找到并操纵这些对象。

我建议通过blockui id找到它们。 Widget对象包含它的id,因此在从页面获取所有全局对象和所有blockui id之后,我们可以确定哪些全局对象是blockui小部件。可以使用jQuery类选择器获取页面中的Blockui ID,因为它们都具有通用的css样式:.ui-blockui

以下是JavaScript示例代码,其中显示了页面上的所有blockui组件:

var keys = Object.getOwnPropertyNames( window );
var blocks = $('.ui-blockui');
var blockIds = [];
blocks.each (function (index,value) {
    blockIds[index] = value.id;
});
$.each(keys, function (index, value) {
    var obj = window[ value ];
    if (obj != null) {
        gObj = window[ value ];
        if(gObj.blocker != undefined) {
            if ($.inArray(gObj.blocker.attr('id'), blockIds) != -1) {
                gObj.show();
            }
        }
     }
});