是否存在折叠rich:tree节点的事件?

时间:2009-10-02 14:45:28

标签: java ajax tree events richfaces

如果用户使用以下方法展开我的客户端处理树的节点,我终于设法接收事件:

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()。

如何获取用户再次崩溃的节点通知?我找不到合适的听众。

1 个答案:

答案 0 :(得分:2)

您可以使用ChangeExpandListener

<rich:changeExpandListener>表示在节点上的展开/折叠事件上通知的动作侦听器方法。

编辑:

首先, changeExpandListener 必须作为<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");
    }
  }
}

那应该有帮助