无论如何都要做到这一点。 如果我尝试在树中拖放两个节点,则两个节点都被删除,但在视图中只会更新其中一个节点。 只有在重新加载页面后,第二个才会处于掉线位置。
我认为问题是该事件只被调用一次。 但是我无法从支持bean更新树。
我的.xhtml
<p:tree id="navigationTree"
value="#{testCaseDefinitionView.tree.root}" var="node"
selectionMode="multiple"
selection="#{testCaseDefinitionView.tree.selectedNodes}"
dynamic="true"
draggable="#{testCaseDefinitionView.isInTreeEditMode()}"
droppable="#{testCaseDefinitionView.isInTreeEditMode()}"
onNodeClick="scrollPosition.save()">
<p:ajax event="select"
listener="#{testCaseDefinitionController.onNodeSelect}"
update=":testautomatContent:treeContentButtons, :testautomatContent:mainPanel"
oncomplete="scrollPosition.restore()" />
<p:ajax event="unselect"
update=":testautomatContent:treeContentButtons, :testautomatContent:mainPanel" />
<p:ajax event="dragdrop"
listener="#{testCaseDefinitionController.onDragDrop}"
oncomplete="markSelectedTreeElements()"
update=":testautomatContent"
process="@form"/>
<p:ajax event="expand"
listener="#{testCaseDefinitionController.nodeExpand}" />
<p:ajax event="collapse"
listener="#{testCaseDefinitionController.nodeCollapse}" />
<p:treeNode type="TEST_GROUP">
<p:outputPanel id="testGroupNode" style="padding: 1px;">
<p:outputPanel id="configIcon" styleClass="config-icon-box"
style="display: inline-block;">
<p:outputPanel
styleClass="#{iconController.getConfigIcon(node.configType).getStyleSutConfig()} boxsizing-border" />
<p:outputPanel
styleClass="#{iconController.getConfigIcon(node.configType).getStyleTcConfig()} boxsizing-border" />
</p:outputPanel>
<p:outputPanel styleClass="nowrap" style="display: inline-block;">
<h:outputText id="testGroupNodeLabel" value=" #{node.name}" />
</p:outputPanel>
</p:outputPanel>
</p:treeNode>
<p:treeNode type="TEST_CASE">
<p:outputPanel id="testCaseNode" style="padding: 1px;">
<span class="#{iconController.getTypeIconStyle(node.type).small()}" />
<h:outputText id="testCaseNodeLabel" styleClass="nowrap" value=" #{node.name}" />
</p:outputPanel>
</p:treeNode>
</p:tree>
和Bean中的onDragDrop
public void onDragDrop(TreeDragDropEvent event) {
DragAndDropState dragAndDropState = DragAndDropState.FAIL;
nodesToDrag = Arrays.asList(view.getTree().getSelectedNodes());
for (TreeNode nodes: nodesToDrag) {
dragAndDropState = view.getTree().updateDragDrop(nodes, event.getDropNode());
logger.warn(event.getComponent().toString());
RequestContext.getCurrentInstance().update(":testautomatContent");
}
if (!(dragAndDropState.equals(DragAndDropState.SUCCESS)) && !(dragAndDropState.equals(DragAndDropState.MULTISELECTION))) {
showDragAndDropMessage(dragAndDropState.getErrorMessage());
}
}