2012-11-02 1 views
0

내 jsf 페이지에 <p:treeTable> 구조가 있습니다. 나는 열 중 하나에 배치 작은 아이콘을 클릭 노드 삭제하는 것을 시도하고있다 :Primefaces TreeNode가 두 번째 작업에서 삭제됨

<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

동일한 문제가 발생합니다. Primeface는 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> 

불행히도 다음의 전체 페이지 새로 고침은 유용성을위한 최선의 방법이 아닙니다.