Tree组件使用指南之三:定制SelectionListener

187 篇文章 2 订阅
运行环境:JDeveloper 11.1.2.2.0 + Oracle Database 10g Express Edition 10.2.0.1。

默认情况下,Tree组件的SelectionListener绑定的值型如:"#{bindings.DepartmentsView1.treeModel.makeCurrent}"。
实际场景中,可能需要在点击树节点时调用自己的逻辑,这时就需要定制SelectionListener。
把Selection Listener指向Managed Bean中的一个方法,比如:selectionListener="#{myBackingBean.treeSelectionListener}" 。
然后在该方法中用代码实现makeCurrent功能,并在其后加入自己的逻辑。

本实验前面的步骤和《 Tree组件使用指南之一:创建 》一样。以下只对重点步骤说明:

1. 修改Tree的Selection Listener,指向Managed Bean中的方法 

2. Managed Bean的完整代码 
package view;

import java.util.Iterator;
import java.util.List;

import oracle.adf.view.rich.component.rich.data.RichTree;

import oracle.jbo.Row;
import oracle.jbo.uicli.binding.JUCtrlHierBinding;
import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;

import oracle.jbo.uicli.binding.JUCtrlHierTypeBinding;

import org.apache.myfaces.trinidad.event.SelectionEvent;

import org.apache.myfaces.trinidad.model.CollectionModel;
import org.apache.myfaces.trinidad.model.RowKeySet;

import view.util.JSFUtils;

public class MyBackingBean {
    public MyBackingBean() {
    }

    public void treeSelectionListener(SelectionEvent selectionEvent) {
        JSFUtils.invokeMethodExpression("#{bindings.DepartmentsView1.treeModel.makeCurrent}", Object.class,
                                        SelectionEvent.class, selectionEvent);

        RichTree tree = (RichTree)selectionEvent.getSource();
        RowKeySet rowKeySet = selectionEvent.getAddedSet();
        Iterator rksIterator = rowKeySet.iterator();
        while (rksIterator.hasNext()) {
            List key = (List)rksIterator.next();
            JUCtrlHierBinding treeBinding = null;
            CollectionModel collectionModel = (CollectionModel)tree.getValue();
            treeBinding = (JUCtrlHierBinding)collectionModel.getWrappedData();
            JUCtrlHierNodeBinding nodeBinding = treeBinding.findNodeByKeyPath(key);
            
            Row rw = nodeBinding.getRow();
            String rowType = rw.getStructureDef().getDefName();
            System.out.println("########################### rowType " + rowType);
            
            JUCtrlHierTypeBinding typeBinding = nodeBinding.getHierTypeBinding();
            String nodeStuctureDefname = typeBinding.getStructureDefName();
            System.out.println("########################### nodeStuctureDefname " + nodeStuctureDefname);

        }
    }
}


3. 运行,输出如下
########################### rowType EmployeesView
########################### nodeStuctureDefname model.EmployeesView
########################### rowType DepartmentsView
########################### nodeStuctureDefname model.DepartmentsView

可以看出,点击不同的树节点时输出了每个节点的类型。

Project 下载: ADF_Tree_SelectionListener.7z

说明,本来想按照参考文献2写一个通用的treeSelectionListener,但是没有成功。
经过反复试验发现必须先要执行Tree原来绑定的SelectionListener,然后才可以调用自己的逻辑,否则findNodeByKeyPath(key)会返回Null。

参考文献:
1. https://blogs.oracle.com/jdevotnharvest/entry/how_to_read_data_from

2. http://www.oracle.com/technetwork/developer-tools/adf/learnmore/25-generic-tree-selection-listener-169164.pdf

http://maping930883.blogspot.com/2012/06/adf133treeselectionlistener.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值