2009-10-02 23 views
2

我终于设法如果用户展开我的客户端的使用下面的方法来处理树中的节点接收事件:),因为recursiveTreeNodesAdaptor的是否有一个折叠rich:tree节点的事件?

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

我不得不使用#getRowData(。

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

回答

2

你可以使用ChangeExpandListener

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

编辑:

首先changeExpandListener必须delared为属性为<rich:treeNode>,如果申报entired树的作品,你写(选择事件之后被处理的事件)。 所以:

<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"); 
    } 
    } 
} 

这应该有助于

+0

我怎样才能区分扩大崩溃? 我使用客户端崩溃,事件侦听器在提交树时触发 - 例如,在更改选择时。在这一点上,每个展开的节点都有一个事件...到目前为止看不到任何折叠节点。 – 2009-10-05 11:37:01

+0

谢谢!这将有所帮助。 – 2009-10-06 14:24:13

相关问题