ADF11g-019:ADF实现动态添加表单

介绍

在ADF的Table中,我们能实现在表格中添加,编辑,删除行的功能,以及一行数据中的级联。然而在多数时候,当一行的列太多,表格中的数据量不多的时候,这种在table中直接添加的方式则显得很不友好,因为要来回的拉动横向的滚动条。那么有什么办法能以表单的方式来添加一行,添加一条数据时添加一个表单,直到有多个表单出现在页面上,当然也包括删除,级联等(还没有实现数据量大时分页功能,因此此功能现在只使用少量数据添加)。本文将介绍如何实现本功能。

效果预览


准备

本实例将以Oracle数据库自带的事例Schema HR作为数据源。另外克隆一个EMPLOYEES的表EMPLOYEES_BAK作为要添加删除的对象,表中的数据量不要太大,可以删除一些。 而上图中的Manager栏位仍然以原有的EMPLOYEES表作为下拉列表的数据源,以便做级联时用。

关键步骤

1.按照ADF标准的做法,在Datacontrol中将Employees的VO拖到页面上,生成一个可编辑的table(此举只为方便后面的步骤,做完后面的步骤,请删除本操作生成的table)。

2.使用af:iterator迭代table中value属性的值,如:#{bindings.Employees1.collectionModel}

<af:iterator id="i1" value="#{bindings.Employees1.collectionModel}"
                     var="row" varStatus="vs">
<!--.......省略........-->
</af:iterator>

3.在af:iterator标签中,可以任意的去排版这个Form,Form中的元素可以从第一步中生成的table中去拖取,内容不用做修改。

4.设置级联组件的PartialTriggers

5.为此功能添加插入、删除、提交、回滚功能。做法和在table中完全一致

6.当表中没有数据时,我们希望在进入页面的时候自动创建一个新行,可以在Taskflow中使用Router判断是否需要创建行


<?xml version="1.0" encoding="UTF-8" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
  <task-flow-definition id="employee-task-flow">
    <default-activity id="__1">router1</default-activity>
    <managed-bean id="__3">
      <managed-bean-name id="__2">EmployeeBean</managed-bean-name>
      <managed-bean-class id="__5">view.backing.EmployeeBean</managed-bean-class>
      <managed-bean-scope id="__4">view</managed-bean-scope>
    </managed-bean>
    <view id="employeeForm">
      <page>/fragment/employeeForm.jsff</page>
    </view>
    <router id="router1">
      <case>
        <expression>#{data.view_employeeFormPageDef.Employees1Iterator.estimatedRowCount
                    == 0}</expression>
        <outcome id="__6">create</outcome>
      </case>
      <default-outcome>next</default-outcome>
    </router>
    <method-call id="CreateEmployee">
      <method>#{data.view_employeeFormPageDef.CreateInsert.execute}</method>
      <outcome id="__12">
        <fixed-outcome>next</fixed-outcome>
      </outcome>
    </method-call>
    <control-flow-rule id="__7">
      <from-activity-id id="__8">CreateEmployee</from-activity-id>
      <control-flow-case id="__10">
        <from-outcome id="__11">next</from-outcome>
        <to-activity-id id="__9">employeeForm</to-activity-id>
      </control-flow-case>
    </control-flow-rule>
    <control-flow-rule id="__13">
      <from-activity-id id="__14">router1</from-activity-id>
      <control-flow-case id="__15">
        <from-outcome id="__17">create</from-outcome>
        <to-activity-id id="__16">CreateEmployee</to-activity-id>
      </control-flow-case>
      <control-flow-case id="__19">
        <from-outcome id="__20">next</from-outcome>
        <to-activity-id id="__18">employeeForm</to-activity-id>
      </control-flow-case>
    </control-flow-rule>
    <use-page-fragments/>
  </task-flow-definition>
</adfc-config>

总结

其实本文主要还是用实例来说明iterator组件的使用,关于iterator组件和foreach组件的区别可以参见我早些时候写的博客http://blog.csdn.net/ygj26/article/details/8013133

代码下载

http://download.csdn.net/detail/ygj26/4642116



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值