在单选模式下使用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>
谢谢,
答案 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();
}
};