Jsf 如何扩展treeTable的所有节点?
我有一个树表和两个按钮:Jsf 如何扩展treeTable的所有节点?,jsf,primefaces,expand,treetable,Jsf,Primefaces,Expand,Treetable,我有一个树表和两个按钮: 一个是因为树倒下了 另一种是扩大, 但它们不起作用。在支持bean中,我执行了root.setExpanded(true)和root.setExpanded(false)但它不起作用 <center> <p:treeTable value="#{roleMB.root}" var="roleTreeTableVar" binding="#{roleMB.treeTable}" id="roleTreeTable">
- 一个是因为树倒下了
- 另一种是扩大,
root.setExpanded(true)
和root.setExpanded(false)代码>但它不起作用
<center>
<p:treeTable value="#{roleMB.root}" var="roleTreeTableVar"
binding="#{roleMB.treeTable}" id="roleTreeTable">
<f:facet name="header">
<center>
<p:commandButton value="Réduire tout"
icon="ui-icon-folder-collapsed" style="font-size: 0.9em"
actionListener="#{roleMB.expandAll}"
update=":roleTreeTableForm:roleTreeTable" />
<p:spacer width="30px" />
<p:commandButton value="Développer tout"
icon="ui-icon-folder-open" style="font-size: 0.9em"
actionListener="#{roleMB.collapseAll}"
update=":roleTreeTableForm:roleTreeTable" />
<p:spacer width="30px" />
</center>
</f:facet>
<p:column style="width:150px">
<f:facet name="header">
Nom de Role
</f:facet>
<h:outputText value="#{roleTreeTableVar.nom}" />
</p:column>
<p:column style="width:100px">
<f:facet name="header">
Id de role
</f:facet>
<h:outputText value="#{roleTreeTableVar.id}" />
</p:column>
<p:column style="width:20px">
<p:commandLink oncomplete="dlgAddRole.show()" value="Ajouter"
update=":addRoleForm:selectRolesNamesId">
<f:setPropertyActionListener value="#{roleTreeTableVar}"
target="#{roleMB.selectedRole}" />
</p:commandLink>
<p:commandLink oncomplete="delRole.show()" value="Supprimer">
<f:setPropertyActionListener value="#{roleTreeTableVar}"
target="#{roleMB.selectedRole}" />
</p:commandLink>
<p:commandLink oncomplete="editRole.show()" value="Modifier">
<f:setPropertyActionListener value="#{roleTreeTableVar}"
target="#{roleMB.selectedRole}" />
</p:commandLink>
</p:column>
</p:treeTable>
</center>
角色名称
角色标识
您不仅应该为根节点,还应该为所有子节点将expanded
属性设置为true
。这是折叠和展开的递归方法
public void collapsingORexpanding(TreeNode n, boolean option) {
if(n.getChildren().size() == 0) {
n.setSelected(false);
}
else {
for(TreeNode s: n.getChildren()) {
collapsingORexpanding(s, option);
}
n.setExpanded(option);
n.setSelected(false);
}
}
- 变量n是要展开或闭合的节点
- 当变量选项为false时,n的所有子项都为false
在另一种情况下,塌陷是扩展的
- setSelected(false)表示未选择此节点
问题:“如何实现?”
在代码中
public void reloadTree() {
assocRoot = new DefaultTreeNode();
assocRoot.setExpanded(true);
TreeNode currentAssocNode;
AbstractDocument parentAssoc = getParentDocAssociation();
if(parentAssoc !=null) {
TreeNode parentAssocNode = new DefaultTreeNode(parentAssoc);
parentAssocNode.setExpanded(true);
....
可能的解决方案如下所示:
view.xhtml
<h:form id="form">
...
<p:commandButton update=":form:tree" actionListener="#{view.collapseAll}"
icon="fa fa-minus" title="#{msg.collapseAll}"/>
<p:commandButton update=":form:tree" actionListener="#{view.expandAll}"
icon="fa fa-plus" title="#{msg.expandAll}"/>
...
<p:treeTable id="tree" ...>
...
</p:treeTable>
...
</h:form>
向我们展示您的支持bean代码,但是应该在哪里执行此方法?在getSelection()中?在选举()中?在听众中?在我的例子中,我在树表上创建了一个按钮,这个按钮调用方法collangorexpanding(Treenode,true)如果我想使用colapse,请记住这个指令(n.setSelected(false);)set all node no selectedIt工作得很好!如果primefaces树表已经“内置”了此方法,那么它将非常有用。这是如何实现的?
@Named
@ViewScoped
public class View implements Serializable {
private TreeNode root;
...
public void collapseAll() {
setExpandedRecursively(root, false);
}
public void expandAll() {
setExpandedRecursively(root, true);
}
private void setExpandedRecursively(final TreeNode node, final boolean expanded) {
for (final TreeNode child : node.getChildren()) {
setExpandedRecursively(child, expanded);
}
node.setExpanded(expanded);
}
}