Primefaces Tree узел перетаскивается для детей - PullRequest
0 голосов
/ 04 июля 2018

У меня есть дерево PrimeFaces (6.2.5), где я включил перетаскивание и сброс. У меня есть несколько проблем с этим, и я реализовал перетаскивание вручную с помощью jquery вместо этого, пока я это выяснил;

   <div class="plantree" id="realplantree">
   <p:tree id="plantree" value="#{curriculumngTreeFacade.root}" var="node" dynamic="false" selectionMode="single" selection="#{curriculumngTreeFacade.selectedNode}" draggable="true" droppable="true">
        <p:ajax event="select" listener="#{curriculumngTreeFacade.onNodeSelect}"  update="administration-form:curriculummain" oncomplete="initDNDPlan();"/>
        <p:ajax event="expand" listener="#{curriculumngTreeFacade.onNodeExpand}" />
        <p:ajax event="collapse" listener="#{curriculumngTreeFacade.onNodeCollapse}" />
        <p:ajax event="dragdrop" listener="#{curriculumngTreeFacade.onDragDrop}"/>
        <p:treeNode expandedIcon="ui-icon ui-icon-folder-open" collapsedIcon="ui-icon ui-icon-folder-collapsed">
          <h:outputText value="#{node}"/>
        </p:treeNode>
    </p:tree>
</div>

Мои проблемы:

  • Я не добавил переменную "update = 'plantree'" в событие p: ajax для перетаскивания. Даже если я попытаюсь перетащить родительскую категорию в подкатегория, это ломает мое дерево, потому что пользовательский интерфейс пытается обновить. я на самом деле запустить проверку родительского / дочернего соединения в бэкэнде код, и я не обновляю дерево, если это так, но в этом В этом случае мой метод в компоненте поддержки даже не вызывается до дерево взрывается. Он делает то же самое на PrimeFaces Showcase

Код поддержки:

public void onDragDrop(TreeDragDropEvent event) throws Exception {
TreeNode dragNode = event.getDragNode();
TreeNode dropNode = event.getDropNode();

int dropIndex = event.getDropIndex();
if (dragNode.getData() instanceof CurriculumCategoryMetaModel && dropNode.getData() instanceof CurriculumCategoryMetaModel) {

  CurriculumCategoryMetaModel drop = (CurriculumCategoryMetaModel) dropNode.getData();
  CurriculumCategoryMetaModel drag = (CurriculumCategoryMetaModel) dragNode.getData();

  if (drop.getType() == drag.getType() && drag.getClassid() > 0) {
    drag.setParent(drop);
    CurriculumBuilderProvider provider = CurriculumBuilderProvider.getProvider(drop.getType());
    provider.saveCategory(drag, UserSessionFacade.getUserLocale());
    this.initialize();
    expandCategory(root, drop.getClassid(), drop.getType());
  } else {
    this.initialize();
  }

}

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Dragged " + dragNode.getData(), "Dropped on " + dropNode.getData() + " at " + dropIndex);
FacesContext.getCurrentInstance().addMessage(null, message);
List<String> updates = new ArrayList<>();
updates.add("administration-form:curriculummenu");
updates.add("administration-form:growl");
PrimeFaces.current().ajax().update(updates);

}

private boolean dragIsParentOfDrop(CurriculumCategoryMetaModel drop, CurriculumCategoryMetaModel drag) {
CurriculumCategoryMetaModel parent = drop.getParent();
while (parent != null) {
  if (parent.getClassid() == drag.getClassid()) {
    return true;
  } else {
    parent = parent.getParent();
  }
}
return false;

}

  • Есть ли способ добавить принятые узлы, в которые вы можете зайти. у меня есть 2 корневые узлы, для разных категорий, и не допускается перетаскивание и упасть между ними. На самом деле, я даже не хочу, чтобы корневые узлы были перетаскиваемый. На рисунке «Пути обучения» и «Ad hoc» не должны быть перетаскиваемыми, поскольку они являются только контейнерами для категорий внизу. enter image description here
...