p:使用多个节点拖放树

时间:2016-06-14 16:14:00

标签: ajax jsf primefaces tree

无论如何都要做到这一点。 如果我尝试在树中拖放两个节点,则两个节点都被删除,但在视图中只会更新其中一个节点。 只有在重新加载页面后,第二个才会处于掉线位置。

我认为问题是该事件只被调用一次。 但是我无法从支持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="&nbsp;#{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="&nbsp;#{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());
    }
}

0 个答案:

没有答案