Primefaces中的对话更新

时间:2012-10-17 13:56:51

标签: jsf primefaces

我在Primefaces论坛中读到,应该避免直接更新对话框或更新环绕元素,因为实例是重复的和其他奇怪的行为。 但是我们有某种特殊情况,并且确实需要更新包含大量对话框的元素。

如果没有获得重复的实例,是否真的没有办法以同样的方式执行此操作?它如何来到重复的实例?可能只有在appendToBody设置为true时才会发生这种情况,因为它会更新并再次转移到正文而不是仅仅更新?

3 个答案:

答案 0 :(得分:1)

解决方法是修复dialog.js,请参阅Primefaces forum

对于Primefaces 3.4.1:

PrimeFaces.widget.Dialog.prototype._show = function() {
    if(this.cfg.showEffect) {
        var _self = this;

        this.jq.show(this.cfg.showEffect, null, 'normal', function() {
        _self.postShow();
    });
}
else {
    //display dialog
    /*Begin Custom Code*/
    var dlg = jQuery(this.jqId);

    if(dlg.size() > 1){
        dlg.last().remove();
    }
    this.jq = dlg;
    /*End Custom Code*/
    this.jq.show();

    this.postShow();
}

this.focusFirstInput();
this.visible = true;
this.moveToTop();

if(this.cfg.modal)
this.enableModality();
}

答案 1 :(得分:0)

该对话框在v3.0中重新实现。我认为现在没有问题。

答案 2 :(得分:0)

对于Primefaces 3.5

PrimeFaces.widget.Dialog.prototype._show = function() {
    this.jq.removeClass("ui-overlay-hidden").addClass("ui-overlay-visible").css({display:"none",visibility:"visible"});

    if(this.cfg.showEffect){
        var a=this;
        this.jq.show(this.cfg.showEffect,null,"normal",function(){
            a.postShow();
        });
    }
    else {
        //display dialog
        /*Begin Custom Code*/
        var dlg = jQuery(this.jqId);

        if(dlg.size() > 1){
            dlg.first().remove();
        }
        this.jq = dlg;
        /*End Custom Code*/
        this.jq.show();
        this.postShow();
    }
    this.moveToTop();
    if(this.cfg.modal){
        this.enableModality();
    }
}