2

ユーザーが次の方法を使用してクライアント側で処理されたツリーのノードを展開すると、ようやくイベントを受信できるようになりました。

public void processExpansion(NodeExpandedEvent event) throws AbortProcessingException {
 if (event != null && event.getSource() != null && event.getSource() instanceof HtmlTree) {
  this.expandedNodes.add(((UITree) event.getSource()).getRowData());
 }
}

recursiveTreeNodesAdaptorのため、#getRowData()を使用する必要がありました。

ユーザーが再び折りたたまれたノードの通知を受け取るにはどうすればよいですか?適切なリスナーが見つかりませんでした。

4

1 に答える 1

2

ChangeExpandListenerを使用できます

<rich:changeExpandListener>、ノードの展開/折りたたみイベントで通知されるアクションリスナーメソッドを表します。

編集:

最初のchangeExpandListenerは、の属性としてdelaredする必要があります<rich:treeNode>。これは、ツリー全体に対して宣言されている場合、書き込み時に機能します(イベントは選択イベントの後に処理されます)。それで:

<rich:tree value="#{simpleTreeBean.treeNode}" var="item" >
    <rich:treeNode changeExpandListener="#{simpleTreeBean.processExpansion}">
         <h:outputText value="#{item}" />
    </rich:treeNode>                   
</rich:tree>

processExpansionメソッドはNodeExpandedEventをパラメーターとして受け取る必要がありますが、インターフェースorg.richfaces.event.NodeExpandedListenerを実装する必要はありません。

public void processExpansion(NodeExpandedEvent evt) {

  Object source = evt.getSource();
  if (source instanceof HtmlTreeNode) {
    UITree tree = ((HtmlTreeNode) source).getUITree();
    if (tree == null) {
      return;
    }
    // get the row key i.e. id of the given node.
    Object rowKey = tree.getRowKey();
    // get the model node of this node.
    TreeRowKey key = (TreeRowKey) tree.getRowKey();

    TreeState state = (TreeState) tree.getComponentState();
    if (state.isExpanded(key)) {
      System.out.println(rowKey + " - expanded");
    } else {
      System.out.println(rowKey + " - collapsed");
    }
  }
}

それは役立つはずです

于 2009-10-03T08:37:55.987 に答える