我从Primefaces Showcase Tree Checkbox Selection获取此示例:
public TreeCheckboxBean() {
root2 = new CheckboxTreeNode("Root", null);
TreeNode node0 = new CheckboxTreeNode("Node 0", root2);
TreeNode node1 = new CheckboxTreeNode("Node 1", root2);
TreeNode node2 = new CheckboxTreeNode("Node 2", root2);
TreeNode node00 = new CheckboxTreeNode("Node 0.0", node0);
TreeNode node01 = new CheckboxTreeNode("Node 0.1", node0);
TreeNode node10 = new CheckboxTreeNode("Node 1.0", node1);
TreeNode node11 = new CheckboxTreeNode("Node 1.1", node1);
TreeNode node000 = new CheckboxTreeNode("Node 0.0.0", node00);
TreeNode node001 = new CheckboxTreeNode("Node 0.0.1", node00);
TreeNode node010 = new CheckboxTreeNode("Node 0.1.0", node01);
TreeNode node100 = new CheckboxTreeNode("Node 1.0.0", node10);
}
public TreeNode[] getSelectedNodes() {
return selectedNodes;
}
public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
}
public void displaySelectedMultiple() {
if(selectedNodes != null && selectedNodes.length > 0) {
StringBuilder builder = new StringBuilder();
for(TreeNode node : selectedNodes) {
builder.append(node.getData().toString());
builder.append("<br />");
}
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", builder.toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
从那里我检查子节点0.1,节点0.1.0,节点1.1。当我单击显示所选按钮时,通知仅显示上述节点为选中。
有没有办法可以将节点0和节点1包括在内?
因此它将成为节点0,节点0.1,节点0.1.0,节点1,节点1.1
仅供参考:我使用的是Primefaces 4,JSF 2.1.26。
答案 0 :(得分:4)
我认为你必须自己在支持bean中做到这一点。
Collection<TreeNode> selectedNodes2 = new ArrayList<>();
for(TreeNode node : selectedNodes) {
selectedNodes2.add(node);
while (node.getParent()!=null){
selectedNodes2.add(node.getParent());
node = node.getParent();
}
}
你可以使用
node.setSelected(true)
可以根据需要实际选择节点。
答案 1 :(得分:0)
如果你想使用任何策略(而不是ALL)将选择传播给父母,那么你必须实现事件监听器。
<p:tree value="#{treeCheckboxBean.root2}" var="node"
selectionMode="checkbox"
selection="#{treeCheckboxBean.selectedNodes}">
<p:ajax event="select" listener="#{treeBean.onNodeSelect}" />
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
和
public class TreeBean implements Serializable
{
private TreeNode[] selectedNodes;
...
public void onNodeSelect(NodeSelectEvent event)
{
for(TreeNode node = event.getTreeNode(); node != null; node = node.getParent())
{
node.setSelected(true);
ArrayUtils.add(selectedNodes, node);
}
}
}
未经测试,但您明白了这一点:)