我想在同一父节点下设置多个子节点进行选择或检查标记。我看到了这个答案:https://stackoverflow.com/a/17025086/1297935并尝试了以下内容并且它不起作用:
@ManagedBean
@ViewScoped
public class BackingBean extends GenericViewBean {
private TreeNode[] selectedNodes;
public void showChildSelected(){
...
...
selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added
...
...
for(TreeNode treeNode : selectedNodes){
treeNode.setSelected(true);
}
RequestContext.getCurrentInstance().update("listView:tree");
}
}
以上代码仅显示最后选中/选中的子项。是否有任何解决方案从Managed Bean中选择同一父节点的多个子节点? 提前谢谢。
答案 0 :(得分:0)
我认为这似乎是Primefaces中的一些错误,因为Managed Bean中的TreeNode [] selectedNodes正确地显示了2个选定的节点,但在Javascript对象中,PrimeFaces.widgets.treeWidget.selections数组只显示了一个rowKey。仅当选择了同一父项的2个子项时才会发生这种情况。即使在Managed Bean中使用setSelected(true)手动选择treenode之后,行为也没有变化。
目前我正在使用alexSunder发布的Javascript解决方法:https://stackoverflow.com/a/25716716,在他的帖子中他正在使用PrimeFaces.widgets.treeWidget.selectNode(节点,静默),但我看了一下tree.js并得到了复选框的另一种方法:PrimeFaces.widgets.treeWidget.toggleCheckboxNode(node)。以下是我做的改变,它正在工作!!
@ManagedBean
@ViewScoped
public class BackingBean extends GenericViewBean {
private TreeNode[] selectedNodes;
public void showChildSelected(){
...
...
selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added
...
...
for(TreeNode treeNode : selectedNodes){
StringBuilder sb = new StringBuilder();
sb.append("PrimeFaces.widgets.treeWidget.toggleCheckboxNode(");
sb.append("$(\"#listView\\\\:tree\\\\:");
sb.append(treeNode.getRowKey());
sb.append("\"))");
RequestContext.getCurrentInstance().execute(sb.toString());
}
RequestContext.getCurrentInstance().update("listView:tree");
}
}
方法描述:
PrimeFaces.widgets.treeWidget.selectNode(node,silent):silent boolean参数作为false传递时,不会触发Node Select Event,但不会更改checkbox状态,只选择/突出显示Node。
PrimeFaces.widgets.treeWidget.toggleCheckboxNode(node):切换复选框状态以及选择Node,然后触发Node Select Event。