0

我在单选模式下使用 PrimeFaces 3.5 和树表。单节点选择在以下情况下工作正常: 1- 用户单击不同的节点(任何时候只选择一个节点) 2- 用户在按住 Ctrl 键的情况下单击不同的节点(任何时候都只选择一个节点时间)

上面的 1 和 2 都正常工作,除非用户使用键盘 shift 键。即使选择模式是单一的,用户正在设法使用 shift 键选择多个节点,这会导致错误,因为我的后 bean 选择方法需要一个 TreeNode 而不是 TreeNode[] 数组。

知道如何禁用此树表上的 shift 键吗?

 <p:treeTable  value="#{bean.obj.root}" var="somthing" id="myTreeTable"
               selectionMode="single"  selection="#{bean.selectedNode}">
 </p:treeTable>

谢谢,

4

1 回答 1

0

我发现了问题并修复了它。问题出在 Primefaces 3.5 源代码中。在树表 onRowClick 事件中,正确处理了 shift 键,但在下方有一个错误的 if 语句触发了节点的重新选择。这是解决此问题的正确代码:

问题:

     if(this.isMultipleSelection && shiftKey) 

修复

     if(this.isMultipleSelection() && shiftKey) 

它是在比较函数的存在而不是函数的返回值。

onRowClick : function(event, node) {
                if($(event.target).is('td,span:not(.ui-c)')) {
                var selected = node.hasClass('ui-state-highlight'),
                    metaKey = event.metaKey||event.ctrlKey,
                    shiftKey = event.shiftKey;

                if(this.isCheckboxSelection()) {
                    this.toggleCheckboxNode(node);
                }
                else {
                    if(selected && metaKey) {
                        this.unselectNode(node);
                    }
                    else {
                        if(this.isSingleSelection()||(this.isMultipleSelection() && !metaKey)) {
                            this.unselectAllNodes();
                        }

                        if(this.isMultipleSelection() && shiftKey) {
                            this.selectNodesInRange(node);
                        }
                        else {
                            this.selectNode(node);
                            this.cursorNode = node;
                        }
                    }
                }
                PrimeFaces.clearSelection();
            }
        };
于 2013-06-28T13:55:28.890 回答