防止节点在Primefaces树中的某些类型的节点上被删除

时间:2013-09-25 08:05:48

标签: primefaces drag-and-drop tree

我有一棵树,我的代码是:

<p:tree id="tree_newCms_pl"
        value="#..............."
        var="item"
        animate="true"
        selectionMode="single" selection=".............."
        dynamic="true"
        draggable="true" droppable="true">

enter image description here

我只想允许更改节点的位置,并防止它被丢弃到不同的父节点上。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

我通过以下方式解决了类似的问题。

在辅助bean中检查事件中的drop TreeNode的类型,并且仅在基础数据模型是被拖动节点的有效目标时才更新它。

TreeNode dragNode = event.getDragNode();
TreeNode dropNode = event.getDropNode();

if ( dropNode.getType().equals( VALID_TYPE ) )
{
   //Update the underlying data structure here
}
else
{
  //Display a warning to the user if required
}

我也在更新树的监听器事件中,所以它从数据模型中重新绘制,例如

<p:ajax event="dragdrop" listener="#{managingBean.onDragDrop}" update="tree_newCms_p"/>

如果你不重绘树,它会将元素显示在错误的位置,即使没有进行基础移动。

答案 1 :(得分:3)

这可以使用属性来完成。的 dropRestrict="sibling" 即可。

<p:tree id="tree_newCms_pl"
        value="#..............."
        var="item"
        animate="true"
        selectionMode="single" selection=".............."
        dynamic="true"
        draggable="true" droppable="true" dropRestrict="sibling">

根据documentation

的说明
  

在节点被删除有效值时定义父子限制   没有(默认)和兄弟。