在这篇文章中,我想跟进我以前关于Oracle集合数据类型的文章 ,并且我将集中精力使用af:table组件中的oracle.jbo.domain.Array属性。

因此,在我的数据库中,我具有以下SQL类型:

create or replace type varchar2_array_type as table of varchar2(200)

我有下表:

create table testarray (
SomeField Number,
ArrValue VARCHAR2_ARRAY_TYPE)
nested table ArrValue store as arrvalue_tab return as value;

ADF BC模型中有一个基于testarray表的实体:

属性Arrvalue的数据类型为oracle.jbo.domain.Array。

绑定容器中有一个相应的属性绑定:

<attributeValues IterBinding="VTestarrayIterator" id="Arrvalue"><AttrNames><Item Value="Arrvalue"/></AttrNames></attributeValues>

显示此属性值的最简单方法如下:

<af:table value="#{bindings.Arrvalue.inputValue.array}" var="row" id="t1"><af:column sortable="false" headerText="Array Values" id="c1"><af:inputText value="#{row}" id="ot3"/>             </af:column>
</af:table>

结果看起来非常不错:

这种方法的唯一问题是该表不可更新。 它是只读的。

EL表达式“#{bindings.Arrvalue.inputValue.array}”将调用方法oracle.jbo.domain.Array.getArray() ,该方法返回一个不变的Object []数组,并且对该数组的所有修改都将丢失。

如果我们需要能够更新表中的数据,则必须执行以下操作:

  1. 制作bindings.Arrvalue.inputValue.array的副本
  2. 将此副本设置为表的值
  3. 在“更新模型值”阶段,将副本包装回oracle.jbo.domain.Array,并将其放入Arrvalue.inputValue。

因此,我们将制作一个副本并将其保留在请求范围托管的bean中:

private Object[] array = null;private Object[] createArray() {JUCtrlValueBinding dcb = getArrayCtrlBinding();if (dcb!=null){Array arr = (Array) dcb.getInputValue();if (arr!=null) {array = arr.getArray();}          }return array;
}public void setArray(Object[] array) {this.array = array;
}public Object[] getArray() {return (array == null ? createArray() : array);
}private JUCtrlValueBinding getArrayCtrlBinding() {BindingContext bc = BindingContext.getCurrent();DCBindingContainer binding = (DCBindingContainer) bc.getCurrentBindingsEntry();return (JUCtrlValueBinding ) binding.findCtrlBinding("Arrvalue");
}

当使用此副本作为表的值时,我们可以执行以下操作:

<af:table value="#{TheBean.array}" var="row" id="t1"varStatus="status"><af:column sortable="false" headerText="Array Values" id="c1"><af:inputText value="#{TheBean.array[status.index]}" id="ot3"/>             </af:column></af:table>

请注意,我们不仅使用#{row}作为inputText的值。 这将不起作用,因为#{row}只会返回一个不变的String。 取而代之的是,我们使用了varStatus表属性。 EL表达式#{TheBean.array [status.index]}使框架能够在“更新模型值”阶段调用相应的setter方法,因此表中所做的所有修改都将保存到TheBean.array中

最后一步是在“更新模型值”阶段将TheBean.array放回属性值。 为此,我们可以使用伪造的不可见的inputText

<af:inputText value="#{TheBean.dummy}" visible="false" converter="EmptyConverter"id="it2"/>

此输入文本应放在页面上表格的下方。 这种方法的优点在于,框架将尝试在每个请求上更新inputText值。 因此,将表值保存到TheBean.array之后,将在更新模型值阶段对每个请求调用setter方法TheBean.setDummy(String dummy) 。 现在,我们将把数组包装到oracle.jbo.domain.Array中 ,然后放回Arrvalue.inputValue

public void setDummy(String dummy) {getArrayCtrlBinding().setInputValue(new Array(array));   array = null;
}

虚拟 inputText的秘密隐藏在EmptyConverter中:

public class EmptyConverter implements Converter {public Object getAsObject(FacesContext facesContext,UIComponent uIComponent, String string) {return null;}public String getAsString(FacesContext facesContext,UIComponent uIComponent, Object object) {return null;}
}

它模拟已随请求为此组件提交了值。 另一方面, 伪获取器总是返回一个非空值:

public String getDummy() {return DUMMY;}

因此,该框架别无选择,只能在“更新模型值”阶段调用setDummy方法。

本文的示例应用程序需要JDeveloper 11.1.1.7。

而已!

翻译自: https://www.javacodegeeks.com/2014/04/working-with-the-array-data-type-in-a-table.html

使用表中的数组数据类型相关推荐

  1. python 结构体数组 定义_一篇文章弄懂Python中所有数组数据类型

    前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...

  2. bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型

    前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...

  3. 一文搞懂Python中的所有数组数据类型

    数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearray ...

  4. 在c语言中引用数组元素时,其数组下标的数据类型允许是什么

    在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式.C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为"数组名[下标]",下标可以是 ...

  5. python数组类型_一文搞懂Python中的所有数组数据类型

    关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. 联系:hylinux1024@gmail ...

  6. 【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)

    文章目录 一. 引用数据类型中的数组 1.1 概述 1.2 初始化 1.2.1 字面量 1.2.2 构造函数模式 1.3 访问 1.4 length属性 1.5 数组遍历 1.6 类数组对象 1.6. ...

  7. java中数组的引用是什么意思_java中的数组是引用数据类型。

    [判断题]合金的组元决定了合金的性能 . [单选题]下列分子中存在分子内氢键的是 [单选题]下列电子构型中,不属于基态原子电子构型的是 [判断题]面心立方晶格的纯铁较体心立方晶格的纯铁强度高 [判断题 ...

  8. Numpy中使用astype函数转换numpy数组数据类型

    Numpy中使用astype函数转换numpy数组数据类型 目录 Numpy中使用astype函数转换numpy数组数据类型 numpy是什么?numpy和list有哪些区别? Numpy中使用ast ...

  9. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

最新文章

  1. android 轮播 getWith,NavigationTermSet.GetWithNewView 方法
  2. 《系统集成项目管理工程师》必背100个知识点-93国家信息化体系六要素
  3. jquery基本操作
  4. CentOS 分区方案
  5. 用户体验的76个体验点
  6. 扒一扒.NET Core的环境配置提供程序
  7. 明明还有大量内存,为啥报错“无法分配内存”?
  8. 虚拟化桌面初始化配置处理
  9. 剑指offer面试题[9]-裴波那契数列
  10. (转载)软件测试全套教程,软件测试自学线路图
  11. Dll入口函数参数详解...
  12. 2021.12.10 vue vue-cil (12)
  13. NLP-文本处理:词性消歧
  14. 如何自学3D游戏场景建模和设计?
  15. 解决真机识别为虚拟机,Sorry, this application cannot be run under a Virtual Machine
  16. Learn English with M / 学习英语的十句经典名言
  17. RT-Thread学习1-tcp_modbus
  18. 美容院如何更好的招揽顾客
  19. dp专题 神奇的口袋
  20. 网关状态检测 echo request/reply

热门文章

  1. 高德地图路线规划 时间_路线准、播报拥堵及时,这次自驾出行高德地图可算是帮了大忙...
  2. 配置phython环境
  3. html5中 save方法,如何HTML5画布另存为窗口8 Metro应用中的图像文件?(How to save html5 c...
  4. 转:elasticsearch nested嵌套查询
  5. DFS应用——遍历无向图
  6. javafx 打印控件_Java的新视差控件(JavaFX)
  7. log4j2 logger_简单一致的Log4j2 Logger命名
  8. 红帽 jboss_红帽峰会2015所需的JBoss BPM内容指南
  9. spring javaee_JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!
  10. 夏末浅笑_2014年夏末大Java新闻