Primefaces 树:取消选择事件

Primefaces 树:取消选择事件,primefaces,Primefaces,如果某个条件为真,是否有方法取消primefacesp:tree中节点的选择事件 我想显示一个对话框,如果用户选择“取消”选项,则不应更改选择。 我曾尝试从p:ajax调用javascript函数,但还是选择了新节点 <p:ajax event="select" onstart="showDialog()"/> 我必须重写Primefaces树的默认行为 PF6.2如果要取消请求,需要在onstart中显式返回false onstart="return false;" 将取

如果某个条件为真,是否有方法取消primefaces
p:tree
中节点的选择事件

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

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

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



PF6.2

如果要取消请求,需要在
onstart
中显式返回
false

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

onstart="return showDialog();"

然后,您的挑战是如何“延迟”此javascript函数的返回,以便提供用户操作的返回值

我终于想出了另一个解决方案:我已经覆盖了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);
}
我使用了jqueryui确认对话框。如果用户单击“继续”,我将使用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" );
                }
            }
        });
    } );

有点棘手,但似乎工作得很好。

Dit您是否尝试
onstart=“return false;”
?那么它被取消了吗?您很可能还希望,如果使用取消了操作,那么值是“重置”吗?否则,用户看到的内容与模型包含的内容不一致。对吧?啊。。。正确的。使用onstart=“return false;”取消选择。对于重置值,我可以只更新组件。谢谢!嗯,如果我们能在服务器选择事件发生之前取消它,那就太酷了。。。???这不就是返回false在Javascript中所做的吗?我等不及用户输入了。因此,我认为更简单的解决方案是onstart=“showDialog();return false;”,而不是从对话框的ok/cancel按钮执行所需的javascript(选择或执行其他操作)。。。您可以在javascript中执行超时,如果您使对话框成为模态,则用户必须执行某些操作。因此,如果用户没有执行任何操作,请执行新的100毫秒超时。。。可能有用…甚至可能在
p:ajax
\works中添加
p:confirmDialog
?它只是可能…也许我会看看我是否能找到一个通用的PrimeFaces补丁,让confirmDialog以这种方式工作。不幸的是,我注意到,如果have onstart=“return false”新节点被高亮显示,有没有办法阻止它?