【发布时间】:2021-10-12 23:02:25
【问题描述】:
我在更新 primefaces 树表时遇到问题。编辑节点的名称没有问题,但是当我添加或删除一个元素时,树视图没有更新。
elementsTreeView.xhtml 如下所示:
<p:treeTable value="#{elementsTreeView.root}" var="node" dynamic="false" id="elements"
nodeVar="#{elementsTreeView.root}">
<p:ajax event="collapse" listener="#{elementsTreeView.onNodeCollapse}" />
<p:column headerText="#{labels['elements-tree-view.name']}"
sortBy="#{elementsTreeView.getCorrectNamingScheme(node)}" sortOrder="asc"
filterBy="#{elementsTreeView.getCorrectNamingScheme(node)}" filterMatchMode="contains"
selectionMode="single">
<p:commandLink value="#{elementsTreeView.getCorrectNamingScheme(node)}"
action="#{elementsTreeView.navigateToEditElement(node)}"/>
</p:column>
<p:column headerText="#{labels['elements-tree-view.creation-date']}">
<h:outputText value="#{node.creationDate.time}">
<f:convertDateTime type="date" pattern="dd.MM.yyyy hh:mm" />
</h:outputText>
</p:column>
<p:column headerText="#{labels['elements-tree-view.position-in-folder']}"
>
<h:outputText value="#{elementsTreeView.determinePositionInFolder(node)}"
rendered="#{not elementsTreeView.isFolder(node)}"/>
</p:column>
<p:column headerText="#{labels['elements-tree-view.actions']}">
<p:commandButton icon="pi pi-plus"
action="#{elementsTreeView.navigateToCreateFolder(node)}"
rendered="#{elementsTreeView.isFolder(node)}" styleClass="table-button rounded-button"
value="#{labels['elements-tree-view.create-folder']}"/>
<p:commandButton icon="pi pi-plus" action="#{elementsTreeView.navigateToCreateNote(node)}"
rendered="#{elementsTreeView.isFolder(node)}" styleClass="table-button rounded-button"
value="#{labels['elements-tree-view.create-note']}"/>
<br/>
<p:commandButton icon="pi pi-pencil" action="#{elementsTreeView.navigateToEditElement(node)}"
styleClass="table-button rounded-button" update="@form"/>
<p:commandButton icon="pi pi-trash" action="#{elementsTreeView.deleteElement(node)}"
styleClass="rounded-button ui-button-danger" update="@form"
rendered="#{elementsTreeView.isFolder(node)}">
<p:confirm header="#{labels['elements-tree-view.confirmation']}"
message="#{labels['elements-tree-view.confirm-delete-folder']}"
icon="pi pi-info-circle"/>
</p:commandButton>
<p:commandButton icon="pi pi-trash" action="#{elementsTreeView.deleteElement(node)}"
styleClass="rounded-button ui-button-danger"
rendered="#{not elementsTreeView.isFolder(node)}">
<p:confirm header="#{labels['elements-tree-view.confirmation']}"
message="#{labels['elements-tree-view.confirm-delete-note']}"
icon="pi pi-info-circle"/>
</p:commandButton>
</p:column>
</p:treeTable>
删除方法如下所示。我什至从树结构中删除了元素。它仍然没有改变:
public void deleteElement(final Element elementToBeRemoved){
if(elementToBeRemoved instanceof Folder folder) {
folderService.deleteFolder(folder);
}
else if (elementToBeRemoved instanceof Note note){
noteService.deleteNote(note);
}
root.getChildren().removeIf(element->element.getData().equals(elementToBeRemoved));
traverseTree(root, elementToBeRemoved);
}
public void traverseTree(final TreeNode tree, final Element elementToBeRemoved) {
if(tree.getChildren().removeIf(element->element.getData().equals(elementToBeRemoved))){
System.out.println("Entfernt");
return;
}
for (final TreeNode child:tree.getChildren()){
if (child.getData() instanceof Folder){
traverseTree(child, elementToBeRemoved);
}
}
initRoot();
}
如果您需要更多代码片段,请查看我的 bitbucket 公共项目。
最重要的文件:
- 元素树(视图)
- editNode(视图)
- 编辑文件夹(查看)
[1] 项目链接:https://bitbucket.org/Samuel19982/smartorganizr/src/master/
任何帮助将不胜感激。
【问题讨论】:
-
请提供minimal reproducible example(包括版本)
-
您对如何做到这一点有什么建议吗?例如。用户参与每一个动作。我将不得不重写整个应用程序。
-
所以我在过去的几个小时里尽量减少它。这不可能。如果我删除用户,整个应用程序就会像纸牌屋一样崩溃。如前所述,上述 3 个文件最相关。
-
至少包括版本
-
究竟是什么版本?版本的特点是什么?由于我是 stackoverflow 的新手,因此我可能不了解 Stackoverflow 命名法。
标签: jsf primefaces