实现Table数据自动填充功能之一:修改

开发运行环境: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会自动带出来:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值