2012年8月1日星期三

ADF_184:使用Input Text with LOV + Transient Attribute 实现显示名称保存ID

开发环境:JDevloper 11.1.2.1.0+ Oracle Database 10g Express Edition 10.2.0.1。

在上一个文章中,实现的方法是基于多个EO创建一个新VO,然后基于名称字段建立LOV。
有些开发人员不喜欢这种方式,因为使用了多个EO,觉得不够简明。
在本实验中,我在原有的VO上添加了一个临时字段(Transient Attribute):JobTitle。
通过Override VO的Row Impl类的GetJobTitle方法来实现显示名称保存ID。
以下是重点步骤说明:

1. 在EmployeesView上增加Transient Attribute:JobTitle
注意,这里要把Updatable改为Always,否则显示在页面上时,该字段为只读状态。


2. 为JobTitle设置LOV
(1)

(2)

(3)


3. 定制并生成EmployeesViewRowImpl.java

重写getJobTitle方法,把内容从
/**
* Gets the attribute value for the calculated attribute JobTitle.
* @return the JobTitle
*/
public String getJobTitle() {
return (String) getAttributeInternal(JOBTITLE);
}
改成
public String getJobTitle() {
Object jobId = getAttributeInternal(JOBID);
String jobTitle = null;
if (jobId != null) {
Object[] obj = { jobId };
Key key = new Key(obj);

Row[] rows = getJobsView1().findByKey(key, 1);
if (rows != null && rows.length > 0) {
jobTitle = (String)rows[0].getAttribute(1);
}
}
return jobTitle;
}
注意,这里因为JobTitle在JobsView中是第2个Attribute,所以这里使用的是getAttribute(1)。

Project 下载:ADF_LOV_InputText_TransientName.7z

没有评论: