Primefaces Tree Table单选模式和shift键冲突

时间:2013-06-20 13:56:25

标签: jsf jsf-2 primefaces

在单选模式下使用PrimeFaces 3.5和树表。在以下情况下,单节点选择正常: 1-用户点击不同的节点(任何时候只选择一个节点) 2-用户通过Ctrl键向下点击不同的节点(任何时候只选择一个节点)

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

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

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

谢谢,

1 个答案:

答案 0 :(得分: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();
            }
        };