实现Table数据自动填充功能之一:修改
2015-08-07 17:01
190 查看
开发运行环境:JDeveloper 11.1.2.4 + Oracle Database XE11gR2
前一个实验使用的是Form,实际情况中,还可能会使用Table。
考虑以下场景:用户修改一行记录时,修改其中某个字段后,希望能够带出其它字段值,即自动填充。
1. 为了不影响其它VO,新建一个VO:EmployeesDetailsView。
注意,为了演示自动填充的功能,这里手工添加了一个Transient Attribute:JobTitle。
也就是说,这个JobTitle并不是从Jobs EO中关联过来的。
我是为了演示输入JobId,自动把JobTitle带出来。
2. 修改JobsView,增加一个View Criteria:GetJobTitleByJobIdViewCriteria,用于根据JobId获取JobTitle。
3. 修改JobsViewImpl.java,增加一个方法:,用于根据JobId获取JobTitle,并将其暴露到Client。
public void getJobTitleByJobId(String jobId) {
this.setApplyViewCriteriaNames(null);
ViewCriteria criteria =this.getViewCriteria("GetJobTitleByJobIdViewCriteria");
this.setRangeSize(10);
this.applyViewCriteria(criteria);
this.setbv_job_id(jobId);
this.executeQuery();
}
4. 修改页面,在JobId上增加ValueChangeListener
完成后的页面代码如下:
<af:inputTextvalue="#{row.bindings.JobId.inputValue}"
label="#{bindings.EmployeesDetailsView1.hints.JobId.label}"
required="#{bindings.EmployeesDetailsView1.hints.JobId.mandatory}"
columns="#{bindings.EmployeesDetailsView1.hints.JobId.displayWidth}"
maximumLength="#{bindings.EmployeesDetailsView1.hints.JobId.precision}"
shortDesc="#{bindings.EmployeesDetailsView1.hints.JobId.tooltip}"
autoSubmit="true" id="it6"
valueChangeListener="#{viewScope.myBackingBean.onJobIdValueChange}">
<af:autoSuggestBehavior maxSuggestedItems="10"
suggestItems="#{viewScope.myBackingBean.onJobIdSuggest}"/>
<f:validator binding="#{row.bindings.JobId.validator}"/>
</af:inputText>
对应的Managed Bean中的方法代码如下:
publicvoid onJobIdValueChange(ValueChangeEvent valueChangeEvent) {
String newValue = (String)valueChangeEvent.getNewValue();
System.out.println("################################# 1 " +newValue);
OperationBinding binding =ADFUtils.findOperation("getJobTitleByJobId");
binding.getParamsMap().put("jobId", newValue);
binding.execute();
DCIteratorBinding it =ADFUtils.findIterator("JobsView1Iterator");
Row[] allRowsInRange = it.getAllRowsInRange();
if (allRowsInRange.length > 0) {
Row row = allRowsInRange[0];
String jobTitle = (String)row.getAttribute("JobTitle");
System.out.println("#################################2 " + jobTitle);
ADFUtils.setBoundAttributeValue("JobTitle",jobTitle);
}
}
这里有一个问题要注意:就是何时会触发InputText上的ValueChange事件。
答案是:当输入内容和以前的内容不一样时,并且焦点离开当前InputText时。
所以,自动提示功能发生在前,用户选择和以前不同的某个选项后,才会发生ValueChange事件。
因此,不要担心ValueChange事件会调用多次,其实只有一次。
5. 修改页面的Bindings,这一点和前一个实验一样。
不同的地方是,还要多增加一个Attribute Binding:JobTitle和一个methodAction Binding:getJobTitleByJobId。
6. 运行
修改某行记录,选择某个JobId:
选定后,JobTitle会自动带出来:
前一个实验使用的是Form,实际情况中,还可能会使用Table。
考虑以下场景:用户修改一行记录时,修改其中某个字段后,希望能够带出其它字段值,即自动填充。
1. 为了不影响其它VO,新建一个VO:EmployeesDetailsView。
注意,为了演示自动填充的功能,这里手工添加了一个Transient Attribute:JobTitle。
也就是说,这个JobTitle并不是从Jobs EO中关联过来的。
我是为了演示输入JobId,自动把JobTitle带出来。
2. 修改JobsView,增加一个View Criteria:GetJobTitleByJobIdViewCriteria,用于根据JobId获取JobTitle。
3. 修改JobsViewImpl.java,增加一个方法:,用于根据JobId获取JobTitle,并将其暴露到Client。
public void getJobTitleByJobId(String jobId) {
this.setApplyViewCriteriaNames(null);
ViewCriteria criteria =this.getViewCriteria("GetJobTitleByJobIdViewCriteria");
this.setRangeSize(10);
this.applyViewCriteria(criteria);
this.setbv_job_id(jobId);
this.executeQuery();
}
4. 修改页面,在JobId上增加ValueChangeListener
完成后的页面代码如下:
<af:inputTextvalue="#{row.bindings.JobId.inputValue}"
label="#{bindings.EmployeesDetailsView1.hints.JobId.label}"
required="#{bindings.EmployeesDetailsView1.hints.JobId.mandatory}"
columns="#{bindings.EmployeesDetailsView1.hints.JobId.displayWidth}"
maximumLength="#{bindings.EmployeesDetailsView1.hints.JobId.precision}"
shortDesc="#{bindings.EmployeesDetailsView1.hints.JobId.tooltip}"
autoSubmit="true" id="it6"
valueChangeListener="#{viewScope.myBackingBean.onJobIdValueChange}">
<af:autoSuggestBehavior maxSuggestedItems="10"
suggestItems="#{viewScope.myBackingBean.onJobIdSuggest}"/>
<f:validator binding="#{row.bindings.JobId.validator}"/>
</af:inputText>
对应的Managed Bean中的方法代码如下:
publicvoid onJobIdValueChange(ValueChangeEvent valueChangeEvent) {
String newValue = (String)valueChangeEvent.getNewValue();
System.out.println("################################# 1 " +newValue);
OperationBinding binding =ADFUtils.findOperation("getJobTitleByJobId");
binding.getParamsMap().put("jobId", newValue);
binding.execute();
DCIteratorBinding it =ADFUtils.findIterator("JobsView1Iterator");
Row[] allRowsInRange = it.getAllRowsInRange();
if (allRowsInRange.length > 0) {
Row row = allRowsInRange[0];
String jobTitle = (String)row.getAttribute("JobTitle");
System.out.println("#################################2 " + jobTitle);
ADFUtils.setBoundAttributeValue("JobTitle",jobTitle);
}
}
这里有一个问题要注意:就是何时会触发InputText上的ValueChange事件。
答案是:当输入内容和以前的内容不一样时,并且焦点离开当前InputText时。
所以,自动提示功能发生在前,用户选择和以前不同的某个选项后,才会发生ValueChange事件。
因此,不要担心ValueChange事件会调用多次,其实只有一次。
5. 修改页面的Bindings,这一点和前一个实验一样。
不同的地方是,还要多增加一个Attribute Binding:JobTitle和一个methodAction Binding:getJobTitleByJobId。
6. 运行
修改某行记录,选择某个JobId:
选定后,JobTitle会自动带出来:
相关文章推荐
- 解决ListView中使用EditText所遇到的一些冲突
- POJ 1182:食物链
- STL 简单介绍
- JSP内置对象
- HDU 5360 Hiking (贪心+优先队列)
- gradle使用main运行java
- Session 过期时的处理方法之一:禁止弹出窗口
- Tomcat 启动WebApp报错
- sqlserver服务器更改主机名,维护计划无法删除
- 导入的文件经常出现错误的问题
- 零基础学python-import与from的区别
- 事件冒泡与事件捕获
- angular实现select的ng-options
- 存储过程
- 零基础学python-import与from的区别
- matrix67 kmp算法讲解
- 隐藏iOS导航条底部与self.view的分界线的简单方法
- Session 过期时的处理方法之二:Redirect 到其它页面
- hdu 1176 - 免费馅饼 (解题报告)
- Android实战经验之图像处理及特效处理的集锦(总结版)