Oracle ADF之 LOV 级联下拉菜单

ADF中的基于LOV的级联下拉菜单补充:

我们都知道ADF的List Of Values. 虽然很好用,但是对于刚刚接触ADF的人来说,也不是那么好理解的.

前几日在开发中遇到一个需要改造三级级联下拉列表,起初我以为只用改类似下面的RegionCountryVO中的查询语句,从而当不同参数传入的时候,会使得其中的第三个下拉列表出现不同的选项,(你传入的参数只会对第三个下拉列表的选项有影响), 后来我发现,改过sql语句之后,还是没有变化,后来我才发现,为什么每个下拉列表里能出来哪些选项,实际上跟LOV的list data source有关系,而对LOV的值进行过滤主要依靠当前VO的属性来控制. 所以需要改动的查询其实应该是list data source关联的VO.


级联菜单之selectOneChoice:

级联菜单是指:两个或者多个下拉菜单或者选项组,由于父选项的变动而引起的与之相关的子选项可选项的变动.

我们使用oracle xe数据库的schema(HR)的Regions和Countries, 一个Region对应多个Country,当我们选择其中一个Region的时候,Country给我们的可选项会随着Region的值的变化而变化;

在ADF中,想要做到级联的效果其实并不难.

首先分析: 这里我们使用下拉菜单.

通常我们在做下拉菜单的时候,我们都会在下拉菜单里对应上”一组”---(key,value)值, value作为下拉菜单的显示, 而key是做我们后台处理的值使用.当我们选择其中value所显示的选项,我们通常会拿到key来进行我们必要的操作.比如查询.

如果是级联, 子选项的值是取决于父选项的取值.那么子选项一定是将父选项的key作为了参数, 放在子选项的查询条件里. 在每次父选项的值发生变化的时候, 就改变子选项的可选值.

 

创建级联的说明性步骤:

1, 创建我们下拉菜单的数据源VO.(即普通的vo),并且在作为子选项的数据来源的VO中加入查询条件.使用sql中的变量或者view Criteria均可.



2. 创建将两组选项关联的VO(属性可更新). 我们称之为级联VO  后面会说明

我们使用sql来查询.

selectregions.region_id, regions.region_name, countries.country_id,countries.country_name
from regions,countries
whereregions.region_id = countries.country_id

将所有的属性设置为可更新. Updatable = always

3.  在级联VO中, 我们加入父子选项的数据来源.这个时候就会用到我们先前创建的普通VO.

a)        在overview中,点击viewaccessors,然后添加我们需要的VO,ok


b)       在列表中找到子选项的数据来源的VO, 比如:countriesVO,编辑. 你会看到你先前创建的数据来源VO的查询条件.如果是view Criteria,就启用你所需要的, 或者如果你使用的sql变量的话,你可以直接看到参数列表.

c)        *将你在级联VO中对应的Attributename填写到对应的参数Value一栏.(参数的value一定要级联VO中的attributename对应.).原因会有说明.


d)       在作为父子选项的key值上添加LOV


4. 在页面上, 在DataControl面板里把级联VO中的父子选项分别拖拽到页面中,并使用Select One Choice组件.在父选项的组件中加入autoSubmit=”true”, 在子选项的组件中加入autoSubmit=”true”, partialTriggers="父选项组件id".



5. 右键页面, run.

注释:

1. 之所以需要把级联VO设置为属性可以更新是指,VO的属性对于module来说是可以更新的,只有这样,当级联VO中的父选项属性改变的时候,子选项属性改变,才能达到级联的效果,否则在页面上看到的将会是两个选项数据来源的第一行数据(作为text显示,而不再是可变更的下拉列表。)

2. 当级联VO中的父选项改变的时候,也就是父选项的id改变,会更新到module中,然后传递给子选项的查询参数,从而查询出子选项需要的数据.

 

以上内容均为本人个人意见!如果错误还请指正,本人不胜感激!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值