使用表中的数组数据类型
在这篇文章中,我想跟进我以前关于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 []数组,并且对该数组的所有修改都将丢失。
如果我们需要能够更新表中的数据,则必须执行以下操作:
- 制作bindings.Arrvalue.inputValue.array的副本
- 将此副本设置为表的值
- 在“更新模型值”阶段,将副本包装回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
使用表中的数组数据类型相关推荐
- python 结构体数组 定义_一篇文章弄懂Python中所有数组数据类型
前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...
- bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型
前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...
- 一文搞懂Python中的所有数组数据类型
数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearray ...
- 在c语言中引用数组元素时,其数组下标的数据类型允许是什么
在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式.C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为"数组名[下标]",下标可以是 ...
- python数组类型_一文搞懂Python中的所有数组数据类型
关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. 联系:hylinux1024@gmail ...
- 【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. ...
- java中数组的引用是什么意思_java中的数组是引用数据类型。
[判断题]合金的组元决定了合金的性能 . [单选题]下列分子中存在分子内氢键的是 [单选题]下列电子构型中,不属于基态原子电子构型的是 [判断题]面心立方晶格的纯铁较体心立方晶格的纯铁强度高 [判断题 ...
- Numpy中使用astype函数转换numpy数组数据类型
Numpy中使用astype函数转换numpy数组数据类型 目录 Numpy中使用astype函数转换numpy数组数据类型 numpy是什么?numpy和list有哪些区别? Numpy中使用ast ...
- 关于C语言中的数组指针、指针数组以及二级指针
概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...
最新文章
- android 轮播 getWith,NavigationTermSet.GetWithNewView 方法
- 《系统集成项目管理工程师》必背100个知识点-93国家信息化体系六要素
- jquery基本操作
- CentOS 分区方案
- 用户体验的76个体验点
- 扒一扒.NET Core的环境配置提供程序
- 明明还有大量内存,为啥报错“无法分配内存”?
- 虚拟化桌面初始化配置处理
- 剑指offer面试题[9]-裴波那契数列
- (转载)软件测试全套教程,软件测试自学线路图
- Dll入口函数参数详解...
- 2021.12.10 vue vue-cil (12)
- NLP-文本处理:词性消歧
- 如何自学3D游戏场景建模和设计?
- 解决真机识别为虚拟机,Sorry, this application cannot be run under a Virtual Machine
- Learn English with M / 学习英语的十句经典名言
- RT-Thread学习1-tcp_modbus
- 美容院如何更好的招揽顾客
- dp专题 神奇的口袋
- 网关状态检测 echo request/reply
热门文章
- 高德地图路线规划 时间_路线准、播报拥堵及时,这次自驾出行高德地图可算是帮了大忙...
- 配置phython环境
- html5中 save方法,如何HTML5画布另存为窗口8 Metro应用中的图像文件?(How to save html5 c...
- 转:elasticsearch nested嵌套查询
- DFS应用——遍历无向图
- javafx 打印控件_Java的新视差控件(JavaFX)
- log4j2 logger_简单一致的Log4j2 Logger命名
- 红帽 jboss_红帽峰会2015所需的JBoss BPM内容指南
- spring javaee_JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!
- 夏末浅笑_2014年夏末大Java新闻