2009年3月30日星期一

在Task-Flow中实现页面间传值

概述

本文主要说明ADF中如何实现在Task-Flow中的页面之间传值。

在本示例中将创建两个页面,分别为PageAPageB,并完成PageAPageB中的传值。


实现

思路:

步骤一:使用set action listenerset property listener,设置fromtotypeset property listener,将当前页面的值设置到pageFlowScope中,例如设置在#{pageFlowScope.var1}

当然,在task-flow中传值时,可以在actionlistener里面设置值到pageFlowScope中。

步骤二:在页面中取值时,如果需要在一进入页面时就将该值取到并显示在页面中,可以将取值的相关代码写在页面对应的Backing Scope ManagedBean的构造方法中。

1、 创建应用,并基于EmployeesRegions两张表创建EO/VO,并将各自实例添加到AM中。

2、 创建Bounded Task-Flow,拖两个View到该Task-FlowId分别为PageAPageB,完成之间的导航设置。分别双击两个页面,用向导创建出PageA.jspxPageB.jspx

3、 PageA中,右键点击导航到PageB的按钮,在其中添加Set Action Listener,如图完成相关值的传递。

注:此时#{pageFlowScope.var1}会被标红,忽略此处。

4、打开PageB对应的Backing Scope ManagedBean,在其构造方法中添加如下代码:

RequestContext rc = RequestContext.getCurrentInstance();

String value = (String)rc.getPageFlowScope().get("var");

List list = ADFUtils.getBindingContainer().getAttributeBindings();

for (int i = 0; i <>

AttributeBinding abb = (AttributeBinding)list.get(i);

if (abb.getName().equals("FirstName")) {

abb.setInputValue(value);

}

}

rc.getPageFlowScope().clear();

5、保存以上更改和设置,运行该Task-Flow,查看结果:



相关代码请查看:howtopassvaluebetweenpages.rar

2009年3月14日星期六

使用LauchPopupListener过滤lov数据

概述

在实际应用中,lov(list of value)显示的数据往往会根据页面上的某些值进行过滤,此时,可以应用lauchpopuplistener来实现该功能。

实现

1、基于Employees表和Jobs表创建EO/VO/AM并设置Employees对应的VO中的JobId使用Jobs对应的VO作为数据源。

2、在Jobs表对应的VO上添加绑定变量,并修改SQL语句,将该绑定变量应用到SQL语句中,具体代码如下:

SELECT Jobs.JOB_ID,

Jobs.JOB_TITLE,

Jobs.MIN_SALARY,

Jobs.MAX_SALARY

FROM JOBS Jobs

WHERE Jobs.MIN_SALARY>:ls

3、为Employees对应的VO创建页面,并同时生成backingbean,设置JobId属性中的LaunchPopupListener为刚创建成功的backingbean中的方法,这里为filterlov()

4、在backingbean中的filterlov()方法中添加代码,完成数据过滤,具体代码如下:

public void filterlov(LaunchPopupEvent launchPopupEvent) {

BindingContext bctx = BindingContext.getCurrent();

BindingContainer bindings = bctx.getCurrentBindingsEntry();

FacesCtrlLOVBinding lov = (FacesCtrlLOVBinding)bindings.get("JobId");

lov.getListIterBinding().getViewObject().setNamedWhereClauseParam("ls", 400

}

5、保存以上设置,运行页面进行测试。

最终运行结果,完成了对于MIN_SALARY大于4000JobId的过滤:


相关代码:howtofilterlov