在我的jsf页面中,我有一个<p:treeTable>
结构。我在点击其中一列上的小图标时尝试删除节点:
<p:column rendered="#{node.isLeaf}" style="width:70px">
<p:commandLink styleClass="entity-icon" update=":clipboard-tree" ajax="true"
action="#{clipboardManager.removeClipboard(node)}" >
<p:graphicImage value="/resources/images/delete.png" styleClass="entity-icon-tree"/>
</p:commandLink>
</p:column>
我的removeClipboard函数看起来像这样:
public void removeClipboard(FindResult result){
TreeNode node = result.getNode();
node.getChildren().clear();
node.getParent().getChildren().remove(node);
node.setParent(null);
node = null;
}
这类似于primefaces提供的展示。但是,只有在第二次单击时树才会更新,我得到以下异常:
[Index: 0, Size: 0] with root cause java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
仅当我尝试删除节点的最后一个子节点时才会发生这种情况。 有没有人知道为什么会这样?或者我如何解决它? 提前谢谢。
答案 0 :(得分:0)
如果有其他人遇到此问题我找到了解决方法。这不是理想的,但没有其他更好的主意。
鉴于错误消息仅针对节点的最后一个子节点显示,我更改树生成,使得添加的最后一个元素始终为空节点。
这样我在父节点之间得到了一个很好的间距,我可以删除最后一个节点而没有错误。希望这会有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题。在进行ajax调用后重新验证组件模型时,Primefaces似乎存在问题。我注意到的奇怪之处在于,这只发生在元素删除过程中。
我找到的解决方法是禁用删除操作的ajax。在上面给出的例子中,那将是如下:
<p:column rendered="#{node.isLeaf}" style="width:70px">
<p:commandLink
styleClass="entity-icon"
update=":clipboard-tree"
ajax="false" <!-- this one to 'false' -->
action="#{clipboardManager.removeClipboard(node)}">
<p:graphicImage value="/resources/images/delete.png" styleClass="entity-icon-tree"/>
</p:commandLink>
</p:column>
不幸的是,以下完整页面重新加载对于可用性来说不是最好的。