p:tree:取消选择事件

时间:2018-09-18 07:20:43

标签: primefaces

如果满足特定条件,是否可以取消素数p:tree中节点的选择事件?

我想显示一个对话框,如果用户选择“取消”选项,则不应更改选择。 我尝试从p:ajax调用javascript函数,但是无论如何都选择了新节点。

<p:ajax event="select" onstart="showDialog()"/>

我必须重写Primefaces树的默认行为吗?


PF6.2

2 个答案:

答案 0 :(得分:2)

要取消请求,您需要在false中显式返回一个onstart

onstart="return false;"

将取消该请求。这意味着您需要从showDialog AND 中返回true或false,并在onstart中显式返回该值。所以

onstart="return showDialog();"

那么,您面临的挑战是如何“延迟”此javascript函数的返回值,以便您可以提供用户操作的返回值。

答案 1 :(得分:0)

我终于想出了另一种解决方案:我已经覆盖了Primefaces VerticalTree窗口小部件的“ nodeClick”,因此我可以选择显示对话框或继续选择。

这里有个例子:

var param0, param1,param2;

function init() {
    PF('treeWidgetVar').nodeClick = function (b, a) {
        param0 = this;
        param1 = b;
        param2 = a;

        if(checkSomeCondition() == 'true'){
            showMyDialog();
            return;
        }else {
            PrimeFaces.widget.VerticalTree.prototype.nodeClick.call(this, b, a);
        }
    };
}

function doSelection(){
    PrimeFaces.widget.VerticalTree.prototype.nodeClick.call(param0, param1, param2);
}

我使用了JQuery UI确认对话框。如果用户单击“继续”,我将使用savad参数进行选择,否则我将关闭对话框。

    $( function() {
        $( "#dialog-confirm" ).dialog({
            autoOpen: false,
            resizable: false,
            height: "auto",
            width: 400,
            modal: true,
            buttons: {
                "Continue": function() {
                    $( this ).dialog( "close" );
                    doSelection();
                },
                Cancel: function() {
                    $( this ).dialog( "close" );
                }
            }
        });
    } );

有点棘手,但似乎效果很好。