一、创建所需数据
CREATE TABLE "TEST"
(
"ID" NUMBER NOT NULL ENABLE,
"NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE,
"AGE" NUMBER NOT NULL ENABLE,
"DEPT" VARCHAR2(50 BYTE) NOT NULL ENABLE,
CONSTRAINT "TEST_PK" PRIMARY KEY ("ID") ENABLE
)
要导入到数据库中的XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<list>
<persons>
<id>001</id>
<name>张三</name>
<age>34</age>
<dept>销售部</dept>
</persons>
<persons>
<id>002</id>
<name>李四</name>
<age>25</age>
<dept>销售部</dept>
</persons>
<persons>
<id>003</id>
<name>小明</name>
<age>30</age>
<dept>销售部</dept>
</persons>
</list>
二、新建fusion web application-->ImpXML
基于test表建立VO对象 由于我们这里是要导入数据到表中,所以这个VO对象初始应该是没有数据的,因此需要在query中设置
where 1==0 查询条件,使初始行集为空。如下图:
三、新建jspx页-->test.jspx
拖动Input File、Panel Collection控件到页面上,拖动TestView1数据控件到Panel Collection控件里面。现在你的
test.jspx看起来应该是这样
四、编写后台bean响应Inpu File控件的ValueChangeListener
这个bean主要由两个函数组成。
public void getFile(ValueChangeEvent valueChangeEvent)
这个函数通过调用第二个函数
private void parseFile(InputStream file)
对xml文件进行解析后,对TestView1中的行集进行赋值。
这两个函数需要注意以下几点:
1、IOUtils.copy(file.getInputStream(), writer, "UTF-8")
这句要注意后面的编码方式要与XML文件的编码方式相对应,否则,解析出来的有可能是乱码。
2、JXDocumentBuilderFactory factory =
(JXDocumentBuilderFactory)JXDocumentBuilderFactory.newInstance
("oracle.xml.jaxp.JXDocumentBuilderFactory", ClassLoader.getSystemClassLoader());
由于我们主要利用oracle.xml.parser.v2、oracle.xml.jaxp两个库对XML文件进行解析,在这一步建立XML factory的时候,
由于在weblogic lib中也有这样的方法,为了避免冲突,可以采用全限定名称oracle.xml.jaxp.JXDocumentBuilderFactory,
或在weblogic.xml文件中指定库调用优先级的方式限定使用oracle库。这里采用的第一种方式。
3、赋值的时候要注意列名的大小写
五、设置控件属性
设置table控件的PartialTriggers为InputFile控件,Input File控件AutoSubmit属性为true
运行test.jspx,当我们选定xml文件后,它应该自动出现在下面的表里。如下图:
示例源代码下载