使用表中的数组数据类型

在这篇文章中,我想跟进我以前关于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表的实体:

屏幕截图2014-04-25 at 5.06.18 PM

属性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>

结果看起来非常不错:

屏幕截图2014年4月25日下午5.35.38

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最伟大最不可思议最令人感动的父亲

转载于:https://www.cnblogs.com/chenou/archive/2007/10/23/935014.html

关于数据库名、实例名

最近因看到论坛有人问起这方面的东西&#xff0c;将自己的理解加上查阅相关资料整理如下&#xff0c;如果不全或不当的地方&#xff0c;望指正并补全它。 数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID) 在ORACLE7、8数据库中只有数据库名(db_…

linux 文件inode,linux文件系统-inode学习整理

linux文件系统-inode学习整理介绍linux文件系统可讲的模块有很多&#xff0c;包括文件系统整体架构、文件系统分类、虚拟文件系统以及文件系统存储结构等等&#xff0c;本文主要介绍的是文件系统的存储结构&#xff0c;也就是本文的重点-inode。文件存储结构首先从开天辟地开始…

操作方法:Maven的Spring Boot和Thymeleaf

Spring Boot是一款很棒的软件&#xff0c;可让您在几秒钟内引导Spring应用程序。 它确实有效。 尽可能少的配置即可上手。 而且仍然可以更改默认值。 让我们看看用Thymeleaf和Maven引导Spring MVC并在IntelliJ中使用它是多么容易。 Spring MVC Thymeleaf与Maven的基本设置 确…

csharp: 百度语音合成

public string API_id "3333"; //你的IDpublic string API_record null; public string API_record_format null; public string API_record_HZ null;public string API_key "geovindu"; //你的KEYpublic string API_secret_key "geovindu"…

20080408 - VS2003 中 Jscript 文件中文乱码问题

在 VS2003 中新建 Jscript 文件中使用中文时&#xff0c;如果和网页的编码不一致&#xff0c;有可能会出现中文乱码问题。 而 VS2003 的Web页面默认是用 UTF-8&#xff0c;这是多语的首选方案。 但 VS2003 产品的本地化工作可能做得不到位&#xff0c;在其中新建的 Jscript 文件…

一个简单的发布工具

自己写的一个简单工具&#xff0c;可以把做好的程序中的.cs,.sln,等代码文件排除掉&#xff0c;只剩下页面文件 是用.net 2.0做的程序文件 转载于:https://www.cnblogs.com/itants/archive/2007/10/24/935824.html

用于大型事件处理的Akka Java

我们正在设计一个大型的分布式事件驱动系统&#xff0c;用于跨事务数据库的实时数据复制。 来自源系统的数据&#xff08;消息&#xff09;在到达目的地之前经历了一系列转换和路由逻辑。 这些转换是多进程和多线程的操作&#xff0c;包括可以同时执行的较小的无状态步骤和任务…

pygame-KidsCanCode系列jumpy-part8-记录历史最高分

通常在多玩家的游戏中&#xff0c;每个玩家都会有自己的得分&#xff0c;最高分数会成为该游戏的最佳记录。这一篇&#xff0c;学习下如何记录最高得分&#xff1a;&#xff08;为了简化代码&#xff0c;本文采用文件方式&#xff0c;仅记录本机得分&#xff0c;明白原理后&…

linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度

Coreutils Viewer(cv)是一个简单的程序&#xff0c;它可以用于显示任何核心组件命令(如&#xff1a;cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting)的进度。它使用文件描述信息来确定一个命令的进度&#xff0c;比如cp命令。cv之美在于&…

每个Java开发人员都应该阅读的10本书

我已经阅读了自己的软件开发书籍&#xff0c;并且发现发现一本我想多次阅读的书籍非常罕见。 但是&#xff0c;有时我会发现一本书&#xff0c;每次阅读时都会教给我新的东西。 这篇博客文章是对这些稀有宝石的致敬。 现在&#xff0c;我毫不犹豫地向您介绍十本书&#xff0c…

存储过程生成流水号

1&#xff0c;首先在数据库中创建一个存放流水号的表 CREATE TABLE [dbo].[NumSeq] ([Cate] [varchar] (2) NOT NULL ,[DateNo] [varchar] (4) NOT NULL ,[Seq] [int] NULL ,[CrTime] [datetime] NOT NULL ) 上面的代码中&#xff0c;Cate 字段为流水号的头&#xff0c;可以…

tennylvHTML5实现屏幕手势解锁(转载)

来源:https://github.com/lvming6816077/H5lockhttp://threejs.org/examples/http://www.inf.usi.ch/phd/wettel/codecity-download.html (JSCity&#xff1a;把源码可视化成建筑物的 JS 库)http://www.alloyteam.com/2015/07/html5-shi-xian-ping-mu-shou-shi-jie-suo/ (Web前…

Linux中mysql的卸载和重装,linux mysql 卸载后重装

$sudo apt-get remove mysql-common清理残留数据:$sudo dpkg -l |grep ^rc|awk {print $2} |sudo xargs dpkg -P按照正常安装步骤安装注意:如果你想进行远程访问或控制&#xff0c;那么你要做两件事&#xff1a;其一&#xff1a;mysql>GRANT ALL PRIVILEGES ON xoops.* TO x…

NOIP模拟赛(by hzwer) T3 小奇回地球

【题目背景】 开学了&#xff0c;小奇在回地球的路上&#xff0c;遇到了一个棘手的问题。 【问题描述】 简单来说&#xff0c;它要从标号为 1 的星球到标号为 n 的星球&#xff0c;某一些星球之间有航线。 由于超时空隧道的存在&#xff0c;从一个星球到另一个星球时间可能会倒…

oracle 执行多条insert 语句

其实这是一个sqlserver的脚本改的。用脚本的原因是&#xff1a;当时我的oracle不能导入execl,也不能从别的数据库直接导入&#xff0c;最后就用脚本了。 insert all INTO TestA (ID, tbname, colname, coltxt, collen, coltype, coloper, colcontent) VALUES(1, A主表, ZHD0A00…

JUnit ExpectedException规则:超越基础

JUnit测试中有多种处理异常的方法。 正如我在以前的一篇文章中所写的那样 &#xff0c;我最好的方法是使用org.junit.rules.ExpectedException规则。 基本上&#xff0c;规则是用org.junit.Before &#xff0c; org.junit.After &#xff0c; org.junit.BeforeClass或org.junit…

sql 基本操作

数据库表的操作 SQL code ------------------------------列操作-------------------------------------添加列ALTERTABLEt ADDMycolumn intidentity(1,1)||notnulldefault(0) --删除列altertablet dropcolumnMycolumn --修改列altertablet altercolumnMycolumn varchar(20) no…

[EffectiveC++]item34:区分接口继承和实现继承

[EffectiveC]item34&#xff1a;区分接口继承和实现继承 转载于:https://www.cnblogs.com/jeanschen/p/3363569.html

web 上传文件到linux没权限,Javaweb上传文件到Linux 没有读写权限

一、 问题描述背景描述&#xff1a;0.saas-business-运营后台&#xff0c;website-网站页面。1.javaweb程序(saas-business)部署在linux系统 tomcat服务器下&#xff0c;使用该程序里面上传图片功能&#xff0c;上传图片至linux服务器挂载盘(共享盘)中/nfs/uploads/目录下。tom…