CN101788994A - 一种数据展示模型建立方法、数据展示方法及装置 - Google Patents
一种数据展示模型建立方法、数据展示方法及装置 Download PDFInfo
- Publication number
- CN101788994A CN101788994A CN200910162784A CN200910162784A CN101788994A CN 101788994 A CN101788994 A CN 101788994A CN 200910162784 A CN200910162784 A CN 200910162784A CN 200910162784 A CN200910162784 A CN 200910162784A CN 101788994 A CN101788994 A CN 101788994A
- Authority
- CN
- China
- Prior art keywords
- data
- definition
- xml document
- data display
- display model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据展示模型建立方法、数据展示方法及装置,所述数据展示模型建立方法包括:向服务器发送数据展示请求;接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;根据所述数据展示模型XML文档创建表单框架;向服务器发送数据检索请求,该请求中携带所述数据集定义;接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,将所述展示数据填充到所述表单框架中,形成表单并进行展示。
Description
技术领域
本发明涉及计算机信息处理技术领域,具体地,涉及一种数据展示模型建立方法、数据展示方法及装置。
背景技术
在web应用开发过程中,经常需要在网页上按照业务***所要求的表单样式来展示数据,并响应最终用户的增加、删除、更改、查询等操作以及将被需要保存的数据提交到数据库中保存。这其中包含了获取数据,创建表单对象,填充数据,增加数据,删除数据,更改数据,保存改动后的数据等一系列过程。在传统的web应用开发技术中,这个过程是非常繁琐的,特别是开发RIA(Rich Interface Applications,富界面应用)时,客户端脚本(Script)编码工作量大,脚本调试困难,包含大量的重复劳动。例如,如果要在web页面上展示一个表单,通常的做法是:按照业务***需要的表单样式,直接在web页面上用HTML元素(table、div等)组合,生成表单框架。然后调用数据库管理程序获取需要的数据,将获取到的数据依次填充到表单框架中对应的位置上。如果需要修改表单内容并保存修改后的数据,则还需要在web页面上添加相关脚本用于生成编辑控件、处理最终用户输入、提取修改后的数据并保存。服务器端也需要添加相应的代码来处理相关数据。因此现有的web应用开发过程存在开发工作量大,脚本调试困难,容易出错等问题,而且web页面上的表单不具备封装性,可重用性差,导致整个应用的开发效率不高。
发明内容
针对现有技术存在的问题,本发明提供一种数据展示模型建立方法、数据展示方法及装置,以基于可重用的数据展示模型进行数据的展示。
为了实现上述目的,本发明实施例提供一种数据展示模型建立方法,该方法包括:
进行数据展示模型定义,包括定义数据集及显示样式;
根据所述数据展示模型定义生成数据展示模型XML(Extensible MarkupLanguage,可扩展标记语言)文档;
将所述数据展示模型XML文档存储在服务器。
本发明实施例还提供一种数据展示方法,包括:
向服务器发送数据展示请求;
接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;
根据所述数据展示模型XML文档创建表单框架;
向服务器发送数据检索请求,该请求中携带所述数据集定义;
接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,并将所述展示数据填充到所述表单框架中,形成表单并进行展示。
本发明实施例还提供一种数据展示模型建立装置,包括:
定义单元,用于进行数据展示模型定义,包括定义数据集及显示样式;
生成单元,用于根据所述数据展示模型定义生成数据展示模型可扩展标记语言XML文档;
存储单元,用于将所述数据展示模型XML文档存储在服务器。
本发明实施例还提供一种数据展示装置,包括:
第一发送单元,用于向服务器发送数据展示请求;
第一接收单元,用于接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;
创建单元,用于根据所述数据展示模型XML文档创建表单框架;
第二发送单元,用于向所述服务器发送数据检索请求,该请求中携带所述数据集定义;
第二接收单元,用于接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,将所述展示数据填充到所述表单框架中,形成表单;
展示单元,用于展示所述表单。
本发明实施例能够基于可重用的数据展示模型进行数据的展示,减少了二次开发阶段的工作量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例中数据展示模型建立方法的流程示意图;
图2为本发明一实施例中在客户端进行数据展示的流程示意图;
图3为本发明实施例中数据展示模型实例化对象的结构示意图;
图4为本发明实施例中本地数据缓存对象的结构示意图;
图5为本发明另一实施例中在客户端进行数据展示的流程示意图;
图6为图5中步骤S260对应的数据修改操作流程示意图;
图7为本发明实施例中数据库适配器对象的结构示意图;
图8为基于DJFocus的Web开发组件来实现本发明的原理示意图;
图9为本发明实施例中待展示的表单示意图;
图10为本发明实施例中建立数据展示模型的界面示意图;
图11为本发明实施例中通过DJFoucs Designer设计表单的界面示意图;
图12为本发明实施例中数据展示模型建立装置的结构框图;
图13为本发明一实施例中数据展示装置的结构框图;
图14为本发明另一实施例中数据展示装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种建立可重用的数据展示模型的方法,并基于所建立的数据展示模型来解决传统的web应用开发技术中,客户端脚本编码工作量大,脚本调试困难,web页面上的表单不具备封装性以及可重用性差的问题,从而简化web页面的数据展示操作。
本实施例中,首先建立一个数据展示模型并将其存放在服务器上,这个数据展示模型是可重用的,被封装在一个数据模型XML文档中,即该数据展示模型以XML文档形式存放在服务器上,并且不依赖于具体的web页面,可以被不同的web页面所调用。然后在需要展示表单的客户端的web页面上调用建好的数据展示模型,客户端会自动将数据展示模型实例化,创建表单框架,进一步通过向服务器获取作为表单数据的数据XML文档,生成表单并展示在页面上。只要在数据展示模型中定义了数据项的编辑模式和数据提交方式,上述表单的数据就可以被修改和保存,不需要额外编写相关代码。如果客户端需要提交被修改的数据时,只需要调用数据展示模型实例化对象的提交方法即可完成数据提交。
本发明实施例中,建立数据展示模型的过程可在客户端完成,开发人员可通过客户端的浏览器访问数据模型设计页面,进行数据展示模型设计,数据展示模型建立完成后由客户端提交给服务器,以在服务器端保存该数据展示模型。
如图1所示,本发明实施例的数据展示模型建立方法包括:
步骤S110,定义数据展示模型,生成数据展示模型XML文档。
本步骤中,定义数据展示模型可包括定义数据集及显示样式等。
(1)定义数据集
数据集用于描述当前数据展示模型如何获取数据。如果是从数据库获取数据,则定义的数据集包括SQL(Structured Query Language,结构化查询语言)查询语句、相关表(如数据库表)和列的属性定义;如果不是从数据库获取数据,则可定义扩展数据集,扩展数据集只需要定义列的属性。本发明实施例中,如果不从数据库中获取数据,该数据展示模型可被称之为“具有外部数据源的数据展示模型”。这种数据展示模型可不跟数据库交互,而只作为一个展示数据的载体。可以在页面上写脚本以向展示数据的载体中添加数据,该数据展示模型也会根据预先定义的样式和风格来展示添加的数据,但这些添加的数据不能更新到数据库中。
如果需要在运行时确定检索数据的条件,则定义数据展示模型还包括定义检索参数。定义了检索参数后,可以在运行时由脚本传递参数值给数据展示模型作为检索数据的条件。所述运行时确定检索数据的条件是指:在设计数据展示模型时,开发人员不能确定检索数据的条件,需要由最终用户在使用数据展示模型的时候,根据自己的需要,设置检索数据的条件,即检索参数的值。例如,如果在人员信息表中检索所有年龄大于30的人,这个“年龄大于30”就是检索数据的条件。同一个数据展示模型,既可以检索“年龄大于30”的人,也可以检索“年龄大于50”的人,因为开发人员并不是最终用户,所以并不能确定检索数据的条件,此时开发人员可以定义检索参数,最终用户可在使用数据展示模型时确定检索数据的条件,即检索参数的值。所述检索数据的条件可通过执行页面上的脚本来传递给数据展示模型。
(2)定义数据展示模型的显示样式
数据展示模型的显示样式可包括表单布局、编辑模式、显示格式及数据展示模型上放置的对象等;数据展示模型上放置的对象例如可为文本框、按钮、计算域、图片、文件、矩形框、线条等界面对象。在定义数据集之后,数据集所包含的列就可以作为数据展示模型的数据项来使用。根据所需要的表单布局,可指定这些数据项的分布区域和坐标值,将数据项放置到合适的位置上。分布区域包括:标题区、表头区、数据区、表尾区和脚注区等。坐标值就是相对于分布区域的X,Y坐标。每个数据项可以定义不同的编辑模式和显示格式。其中,编辑模式包括数据展示模型中所定义的列对象具有的编辑模式,具体是指该列对象展示在页面上之后,以哪种方式来输入数据,例如包括:手工单行输入、手工多行输入、下拉列表选择、复选框、单选框、弹出日历选择、弹出窗口选择等。显示格式包括:带小数的数字、百分比、货币、日期时间、科学计数法等。除了数据项以外,数据展示模型中还可以添加文本框、按钮、计算域、图片、文件、矩形框、线条等界面对象,每个对象都可以放置在数据展示模型中的任意位置(自由式布局)或放置于网格线中(列表式布局)。其中,计算域对象必须包含一个计算表达式,计算域对象的值就是通过该表达式计算后得到的结果。
在本发明具体应用中,可选地,定义数据展示模型的步骤还可以包括定义如下信息:
(3)定义数据分组条件。
如果表单需要进行分组显示、分组小计等,则可以在数据展示模型中定义数据分组条件。数据分组支持级联分组,所谓级联分组就是指在一个分组的基础上再次分组,比如:先按照人员所属部门分组,再按照性别分组。数据项和计算域都可以作为数据分组条件的元素,数据分组条件是包含至少一个上述元素的计算表达式,比如:要设置数据按照人员性别分组,则表示数据分组条件的表达式为“sex”(性别的字段名为sex)。
(4)定义数据排序条件。
数据展示模型中定义的数据排序条件,用于对展示在客户端页面上的数据进行排序。排序方式有升序和降序两种。数据项和计算域都可以作为数据排序条件的元素,数据排序条件是包含至少一个上述元素的计算表达式。比如,要按照年龄进行排序,则设定排序表达式为“age A”(年龄的字段名为age,A表示从小到大升序排序,降序则使用D)。
(5)定义数据过滤条件。
数据展示模型中定义的数据过滤条件,用于对展示在客户端页面上的数据进行过滤,符合过滤条件的数据行被显示出来,否则被隐藏。数据过滤操作在客户端完成,可以减少与服务器或数据库交互的次数。数据项和计算域都可以作为数据过滤条件的元素,数据过滤条件是包含至少一个上述元素的计算表达式,比如,要设置过滤出所有年龄大于30的记录,则过滤表达式为“age>30”(年龄的字段名为age)。
(6)定义数据提交方式。
数据提交方式定义了在客户端页面上展示的数据被最终用户改动之后,是否需要提交、提交哪些数据、哪几个数据项作为数据提交时的关键字。
数据展示模型定义完成后,会生成一个数据展示模型XML文档。本发明一实施例中,数据展示模型XML文档的格式可如表1所示。
表1.数据展示模型XML文档格式示例
<文档根节点标签><数据集定义标签><数据集SQL语句定义标签/><数据集表标签/><数据集列标签/><检索参数定义标签/><数据过滤条件标签/><数据排序条件标签/></数据集定义标签><数据分组定义标签/> |
<标题区定义标签/><表头区定义标签/><数据区定义标签/><表尾区定义标签/><脚注区定义标签/><文本对象定义标签/><图片对象定义标签/><按钮对象定义标签/><计算域对象定义标签/><矩形框对象定义标签/><线条对象定义标签/><二进制对象定义标签/><列对象定义标签><列编辑模式定义标签/></列对象定义标签></文档根节点标签> |
对于具有外部数据源的数据展示模型,数据展示模型XML文档的格式基本上与表1相同,只是在<数据集定义标签>节点下,不包括<数据集SQL语句定义标签/>和<数据集表标签/>两个节点。
步骤S120,向服务器提交所述数据展示模型XML文档。
具体地,数据展示模型定义完成后,客户端(如通过客户端的浏览器页面脚本)会向服务器发送保存数据展示模型XML文档的请求,以请求服务器端保存所述数据展示模型XML文档。服务器端处理客户端的请求,将该数据展示模型XML文档进行保存。如果保存失败,则服务器端会返回错误信息至客户端。
通过上述步骤S110~S120,便完成了数据展示模型的建立。
基于上述建立的数据展示模型,或者说,基于在上述过程中建立的数据展示模型XML文档,任意与服务器连接的客户端就可以方便地在web页面上进行数据展示。进行数据展示就是获取保存在服务器上的数据展示模型XML文档和相关数据,以表单的形式将相关数据展示在客户端web页面上,以便最终用户查看或操作。如图2所示,本发明一实施例中,在客户端进行数据展示的流程包括:
步骤S210,客户端向服务器发送数据展示请求。
客户端页面上如果包含了引用数据展示模型的脚本或标签,在页面被执行时,就会向服务器端发送请求,以获取指定的数据展示模型XML文档。
服务器端接收到客户端页面的请求后,获取客户端页面所请求的数据展示模型名称,通过模型名称转换为数据展示模型XML文档的实际路径,然后读取文档内容。如果指定的数据展示模型XML文档被找到且能正确读取其内容,则返回数据展示模型XML文档内容到客户端;否则返回错误信息。
步骤S220,接收来自服务器的数据展示模型XML文档。
如果服务器端能够成功找到并读取数据展示模型XML文档的内容,则服务器端会返回数据展示模型XML文档内容到客户端,此时客户端会接收到来自服务器的数据展示模型XML文档。
步骤S230,解析所述数据展示模型XML文档,创建数据展示模型实例化对象,在web页面上展示该数据展示模型实例化对象的表单框架并创建本地数据缓存对象。
数据展示模型XML文档中定义的信息不能直接在网页上显示,而是通过数据展示模型实例化对象来展示。客户端接收到来自服务器端的数据展示模型XML文档后,通过页面脚本调用相应的解析引擎解析所述数据展示模型XML文档,创建数据展示模型实例化对象。数据展示模型实例化对象是一个界面对象,数据展示模型实例化对象不仅可以用于展示数据展示模型所定义的外观和属性,还可以根据数据展示模型创建数据操作的方法和事件,并响应最终用户的各种操作和事件,即具备界面交互能力。比如:最终用户想添加一行新数据,则调用实例化对象的创建的“添加行”方法,上述实例化对象的“添加行”方法负责实现具体的添加操作;在响应事件方面,比如用户在某一个数据项上按下Tab键,则上述实例化对象自动将输入焦点跳转到下一个数据项。
图3为本发明实施例的数据展示模型实例化对象的结构示意图,描述如下:
数据展示模型实例化对象可包括三个子对象:数据定义对象、数据视图对象和数据操作对象。其中数据定义对象负责解析数据展示模型XML文档,存储数据展示模型XML文档中的各种定义;数据视图对象用于读取数据定义对象中的各种定义,并按照各定义所描述的风格在web页面上创建表单框架和填充数据;数据操作对象不依赖于具体的数据展示模型,可为任何数据展示模型的实例对象创建数据操作所需要的方法和事件,其中所述数据操作可包括:提交、增加、删除、修改、查询等,但并不限于此。
针对该数据展示模型实例化对象,客户端根据数据展示模型XML文档中定义的表单布局、界面对象等显示样式信息,在客户端页面上创建相应的网页元素并设置其属性(如宽度、高度、颜色、字体等),以达到预期的界面效果。此时生成的界面网页元素不包括数据,只包括表单框架。
客户端页面脚本在创建好表单框架后,还会自动创建一个本地数据缓存对象。本地数据缓存对象驻留在客户端内存中,刚创建的本地数据缓存对象中并不包含数据。客户端可通过向本地数据缓存对象中添加数据,要向数据缓存对象中增加数据有两种途径:(1)向服务器检索数据并获取数据XML文档,解析数据XML文档,将数据按照行列添加到本地数据缓存对象中;(2)调用数据展示模型实例化对象增加数据的相关方法或事件,将数据行添加到本地数据缓存对象中,并设置列数据值。设置列数据值是设置添加的新行中所包含的若干列的值。一行数据包含若干列,每个列有一个数据值。
本实施例中,本地数据缓存对象的格式示意如图4所示。本地数据缓存对象可按行存储数据,每行包括“行修改状态”和“数据列集合”。其中行修改状态包括:未修改、新增加、被修改(即被替换)、被删除等。数据列集合由若干数据列对象组成。每个数据列对象包括“列修改状态”和“列数据值”。列修改状态包括:未修改、被修改。列数据值包括:原始值、修改后的值、是否为空。从上述结构可以看出,无论是新增加、删除还是替换的数据,并没有立即提交到服务器端进行处理,而是保存在本地数据缓存对象中,就相当于本地有一个数据集合,任何数据操作都是在这个数据集合上进行。当数据操作完成后,发出提交数据的请求时,再统一向服务器提交这些数据。
本地数据缓存相当于一个本地的临时数据存储容器,客户端页面对数据的读写操作都在这个数据存储容器中进行,不必每次都访问服务器。等客户端操作完成之后,再一次性提交到服务器,因此使用本地数据缓存对象可以减少客户端页面与服务器端交互的次数。同时,因为每次访问的数据都是在本地计算机内存中的对象,没有网络延迟和磁盘读写,所以还能提高页面响应速度。
步骤S240,向服务器发送数据检索请求,该数据检索请求中携带数据展示模型的数据集定义。
客户端页面如果需要检索数据,即进行查询操作,则可通过客户端脚本向服务器端发送检索数据的请求。此时,客户端脚本将数据展示模型的数据集定义部分发送到服务器端,数据集定义包含了获取数据的规则。服务器端响应数据检索请求,并解析接收到的数据集定义,按照数据集定义中的数据获取规则从数据库中获取数据,例如在数据库中执行数据集定义中的SQL语句,得到一个结果集,其中可包含数据集定义所描述的数据库表中的数据。如果成功获取到数据(结果集),则服务器端将获取的数据组合成一个XML格式的文档,即数据XML文档,并返回给客户端页面;否则,向客户端返回错误信息。
客户端检索数据的时候,如果数据展示模型设置了检索参数定义,需要客户端脚本提供检索参数的值。此时,客户端脚本将数据展示模型的数据集定义部分连同检索参数的值一起发送到服务器端。
所述数据XML文档的格式可如表2所示:
表2.数据XML文档格式示例
<文档根节点标签><事务信息标签><执行结果代码/><执行结果描述/></事务信息标签><数据集标签><数据行标签><列标签>数据</列标签></数据行标签></数据集标签></文档根节点标签> |
步骤250,接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,将所述展示数据填充到所述表单框架中,形成表单并进行展示。
客户端接收到服务器端返回的数据XML文档,调用数据解析引擎解析所述数据XML文档,并将解析后获得的展示数据添加到本地数据缓存对象中。
客户端脚本将当前需要展示在页面上的展示数据从本地数据缓存对象中提取出来,填充到客户端页面上创建好的表单框架中,形成完整的表单,从而可通过表单实现客户端页面的数据展示。
实现客户端页面的数据展示之后,本地数据缓存对象将被保留在客户端内存中,用户可以以本地数据缓存对象为基础对数据进行数据修改等操作,数据修改操作又可包括增加、删除、替换等操作。下面对数据操作过程进行详细的说明。
如图5所示,数据展示流程中的后续数据操作还包括如下步骤:
步骤S260,对表单中的数据进行修改操作,对修改后的数据设置修改状态标识并存储所述修改后的数据。
数据修改操作可改变上述创建好的表单中的数据。具体地,如图6所示,数据修改操作的类型例如可分为:增加数据、删除数据和替换数据。其中:
增加数据是按照数据展示模型定义中描述的数据行的结构来添加新的数据行。客户端脚本执行增加数据的脚本后,将新添加的数据行写入到本地数据缓存对象中,并设置该数据行的状态为“新增”。
删除数据是将本地数据缓存对象中要删除的数据行的状态设置为“删除”。如果该数据行是当前页面上展示的数据,则同时从页面上删除。
替换数据是客户端页面脚本将新的数据行写入到本地数据缓存对象中相应的位置,替换原有的数据行,并设置该新的数据行的状态为“替换”。
执行增加、删除或替换等修改操作之后,本地数据缓存对象也被修改,原始的数据和修改后的数据都被记录在本地数据缓存对象中。
如果需要向服务器端提交修改后的数据,则本发明实施例可进一步包括如下步骤:
步骤S270,提取所述修改后的数据,生成数据变更XML文档。
如果需要提交这些被改动的数据,客户端可以调用数据展示模型实例化对象的数据提交方法,该方法可自动遍历本地数据缓存对象,把被改动的数据提取出来,形成一个记录数据改动情况的数据变更XML文档。
数据变更XML文档的格式可如表3所示。
表3.数据变更XML文档格式:
<文档根节点标签><数据集定义标签><数据集SQL语句定义标签/><数据集表标签/><数据集列标签/></数据集定义标签><数据改动记录集标签><数据增加记录集标签><增加的行/></数据增加记录集标签><数据替换记录集标签><替换的行/></数据替换记录集标签><数据删除记录集标签><删除的行/> |
</数据删除记录集标签></数据改动记录集标签></文档根节点标签> |
步骤280,向服务器提交数据更新请求和所述数据变更XML文档,以使所述服务器更新数据库中的数据。
该数据变更XML文档以及数据更新请求可被一起提交到服务器端,服务器端会处理所述数据更新请求,并解析所述数据变更XML文档,利用所述数据变更XML文档更新当前数据库中的数据,例如,更新数据集定义所描述的数据库表中的数据。如果更新失败可返回错误信息,如果更新成功可向客户端返回成功信息及更新的记录数(该记录数表示一次添加、删除或替换了多少条记录)。
由于服务器端管理数据库的数据库管理***有可能是不同类型的数据管理***,而每种数据库管理***的语法都有所差别,因此本发明实施例还提供一种数据库适配器对象,以适应不同的数据库管理***。具体地,可由数据库适配器对象根据不同的数据库管理***,生成适合当前数据库的批量更新数据库的命令并执行所述命令。若执行命令失败可返回错误信息;执行命令成功可返回成功信息和更新的记录数。本发明实施例中,数据库适配器对象是一个Java类对象,其结构示意可如图7所示。图7中,数据库适配器对象为每个数据库管理***提供了一个适配接口,每个接口与对应的数据库驱动程序交互,数据库驱动程序由数据库管理***厂家提供。每个适配接口负责处理特定数据库的语法,为外部程序提供一个统一的数据操作接口。数据检索、数据更新等数据操作的方法都是以这个统一的数据操作接口为基础。数据库适配对象可以增强外部程序的数据库无关性。
本发明实施例中,数据展示模型的建立方法及对应的数据展示方法可以基于多种web开发组件来实现,例如可以基于DJFocus的web开发组件来实现,但本发明并不限于此,其他目前用于web页面开发的组件也同样适用于本发明。其中DJFocus是一个基于Java的web开发组件,程序开发人员可借助DJFocus快速开发web应用。如图8所示,DJFocus可分两部分来实现本发明,一部分是服务器端代码(包括TagLib、Serlvet和JavaBean等),另一部分是在客户端页面中运行的Script脚本。本实施例中,采用DJFocus的具体实现步骤例如可为:
第一步,创建数据展示模型。这个可以通过DJFocus提供的设计器(Designer)进行设计,也可以手工创建一个XML文档,按照表1所规定的格式输入数据展示模型的定义,并将这个XML文档保存在服务器上。
第二步,根据数据展示模型创建数据展示模型实例化对象。开发人员可通过在客户端页面上的TagLib标签调用TagLib服务器端程序,TagLib服务器端程序通过调用相关的JavaBean,并将服务器端的信息返回到客户端页面,这部分程序用于在客户端页面上创建数据展示模型实例化对象。
第三步,调用数据展示模型实例化对象的方法和事件。通过客户端页面上的Script脚本引用DJFocus客户端代码,DJFocus客户端代码通过AJAX技术提交客户端请求到服务器端Servlet程序。DJFocus服务器端Servlet程序接收到客户端的请求后,调用相关的JavaBean或者通过JavaBean调用数据库适配器从数据库获取数据,并将处理结果返回到客户端页面,从而实现数据的展示。
从上述过程可以看出,传统技术中在web页面上用HTML组合表单的过程被本发明的数据展示模型的建立和数据展示过程所替代;并且传统技术中在web页面上编写Script脚本处理数据修改的过程被封装到本发明的数据展示模型实例对象中,不需要额外编写代码。
以下通过一个在网页上展示表单数据的例子来说明发明的效果。
图9是要展示一个最基本的列表式表格。要实现如图9所示的展示,要求从数据库表person_info中取出4个字段的数据并展示,这4个字段分别为id(标识,例如可为编号),name(姓名),sex(性别)及age(年龄),其中sex字段根据代码“1”或者“0”显示“男”还是“女”。图9所示的表格中,要求每个数据项的数据可编辑,并能增加、删除和保存数据。
下面分别在硬件软件环境完全一样的情况下,通过采用传统技术和采用本发明的数据展示方法来体现本发明的有益效果。本实施例中,采用的软件平台是基于DJFocus的Web开发组件。
(1)采用传统技术
采用传统技术,开发人员需要写两个页面:数据展示页面normal_showData.jsp和数据保存页面normal_saveData.jsp,这两个页面的脚本代码见表4。去掉jsp和HTML页面所必需的代码外,用于数据展示和操作的脚本代码共计195行。
表4.normal_showData.jsp和normal_saveData.jsp的脚本代码
normal_showData.jsp |
<%@page contentType=″text/html;charset=UTF-8″%><%@page import=″java.sql.*″%><html><head><title>传统技术展示表单数据</title><meta http-equiv=″Content-Type″content=″text/html;charset=UTF-8″><script type=″text/javascript″src=″djfocus/utils.js″charset=″UTF-8″></script></head><style>button{font:9pt宋体;width:88;height:23;}td{border-right:1px solid black;border-bottom:1px solid black;}table{font:14pt宋体;table-layout:fixed;line-height:30px;border-top:1px solidblack;border-left:1px solid black;}input{font:14pt宋体;border:0;width:100%;}select{width:100%;font:14pt宋体;}</style><body><button id=btnAdd>添加行</button><button id=btnDelete>删除行</button><button id=btnSave>保存数据</button><hr><table id=dataTable cellspacing=0cellpadding=0><tr style=″background-color:#F0F0F0;text-align:center;″><td style=″width:60;″>序号</td><td style=″width:100;″>编号</td><td style=″width:120;″>姓名</td> |
normal_showData.jsp |
<td style=″width:100;″>性别</td><td style=″width:100;″>年龄</td></tr><%Connection conn=null;Statement stmt=null;ResultSet rs=null;int rowNum=0;try{//获取数据库连接Class.forName(″oracle.jdbc.driver.OracleDriver″);conn=DriverManager.getConnection(″jdbc:oracle:thin:@10.10.0.8:1521:demoDB″,″demoUser″,″pwd1234″);stmt=conn.createStatement();//执行SQL语句获取数据rs=stmt.executeQuery(″select id,name,sex,age from person_info orderby id″);while(rs.next()){//在循环中将结果集中的数据填入表单中相应单元格rowNum++;%><tr><td align=″center″><%=rowNum%></td><td><input type=text value=″<%=rs.getString(1)%>″onfocus=″this.select();_curRow=this.parentElement.parentElement.rowIndex;″></td><td><input type=text value=″<%=rs.getString(2).trim()%>″onfocus=″this.select();_curRow=this.parentElement.parentElement.rowIndex;″></td><td><selectonfocus=″_curRow=this.parentElement.parentElement.rowIndex;″><option value=″1″<%=rs.getString(3).equals(″1″)?″selected″:″″%>>男</option><option value=″0″<%=rs.getString(3).equals(″0″)?″selected″:″″%>>女</option></select></td><td><input type=text value=″<%=rs.getString(4)%>″onfocus=″this.select();_curRow=this.parentElement.parentElement.rowIndex;″style=″text-align:right;″></td></tr><%} |
normal_showData.jsp |
}catch(Exception ex){ex.printStackTrace();}finally{//关闭数据库连接rs.close();stmt.close();conn.close();}%></table><iframe id=″actionFrame″src=″″style=″display:none;″></iframe></body><script language=″javascript″>var_curRow=0;//当前行var_deletedRow;//被删除的行//页面加载完毕事件function document.body.onload(){if(dataTable.rows.length>1){_curRow=1;//默认设置当前行为第1行dataTable.rows[_curRow].cells[1].firstChild.focus();//设置光标焦点到第1行}doInitStatus();//初始化表单状态}//添加按钮点击事件function btnAdd.onclick(){var row=dataTable.insertRow();//在表单中***一行var cell,oInput,oSelect,oOption;//设置第一列:行的序号cell=row.insertCell();cell.align=″center″;cell.innerHTML=row.rowIndex;//设置第二列:编号cell=row.insertCell();oInput=cell.appendChild(document.createElement(″<input type=text>″));oInput.onfocus=function(){this.select();_curRow=row.rowIndex;};oInput.focus();//设置第三列:姓名cell=row.insertCell();oInput=cell.appendChild(document.createElement(″<input type=text>″));oInput.onfocus=function(){this.select();_curRow=row.rowIndex; |
normal_showData.jsp |
};//设置第四列:性别cell=row.insertCell();oSelect=cell.appendChild(document.createElement(″<select>″));oSelect.onfocus=function(){_curRow=row.rowIndex;};//设置性别的下拉选择项oOption=document.createElement(″<option>″);oOption.value=″1″;oOption.text=″男″;oSelect.options.add(oOption);oOption=document.createElement(″<option>″);oOption.value=″0″;oOption.text=″女″;oSelect.options.add(oOption);//设置第五列:年龄cell=row.insertCell();oInput=cell.appendChild(document.createElement(″<input type=text>″));oInput.style.textAlign=″right″;oInput.onfocus=function(){this.select();_curRow=row.rowIndex;};}//删除按钮点击事件function btnDelete.onclick(){if(_curRow<1)return;//将被删除行的关键字段的值保存到数组中if(dataTable.rows[_curRow].cells[1].firstChild.DBValue){_deletedRow.push(dataTable.rows[_curRow].cells[1].firstChild.DBValue);}//删除表单中的行dataTable.deleteRow(_curRow);//设置当前行if(_curRow==dataTable.rows.length)_curRow--;if(dataTable.rows.length>1){if(_curRow<1)CurRow=1;dataTable.rows[_curRow].cells[1].firstChild.focus();//设置行的序号for(var i=1;i<dataTable.rows.length;i++){dataTable.rows[i].cells[0].innerHTML=i;}}} |
normal_showData.jsp |
//保存按钮点击事件function btnSave.onclick(){var sqlStr=″″,idStr=″″,nameStr=″″,sexStr=″″,ageStr=″″,dbValue=″″;var sqlArr=new Array();//在循环中根据数据的情况,生成insert或update语句for(var i=1;i<dataTable.rows.length;i++){dbValue=dataTable.rows[i].cells[1].firstChild.DBValue;//主键的原始值idStr=dataTable.rows[i].cells[1].firstChild.value;//id字段值nameStr=dataTable.rows[i].cells[2].firstChild.value;//name字段值sexStr=dataTable.rows[i].cells[3].firstChild.value;//sex字段值ageStr=dataTable.rows[i].cells[4].firstChild.value;//age字段值if(dbValue){sqlStr=″update person_info setid=″″+idStr+″′,name=″′+nameStr+″′,sex=″′+sexStr+″′,age=″+ageStr+″where id=″′+dbValue+″″′;}else{sqlStr=″insert into person info(id,name,sex,age)values(″′+idStr+″′,″′+nameStr+″′,″′+sexStr+″′,″+ageStr+″)″}sqlArr.push(sqlStr);}//从数组中获取被删除的主键值,并生成delete语句for(var i=0;i<_deletedRow.length;i++){sqlArr.push(″delete person_info where id=″′+_deletedRow[i]+″″′);}//提交生成的sql语句到保存页面actionFrame.location.replace(″/normal_saveData.jsp?sqlList=″+sqlArr.join(″$″));}//初始化表单数据状态的方法function doInitStatus(){document.all.actionFrame.src=″″;_deletedRow=new Array();for(var i=1;i<data Table.rows.length;i++){dataTable.rows[i].cells[1].firstChild.DBValue=dataTable.rows[i].cells[1].firstChild.value;}}</script></html> |
normal_saveData.jsp |
<%@page contentType=″text/html;charset=UTF-8″%><%@page import=″java.sql.*″%><html><head> |
normal_showData.jsp |
<title>传统技术保存表单数据</title><meta http-equiv=″Content-Type″content=″text/html;charset=UTF-8″></head><body><%//获取页面传递的参数String sqlList=request.getParameter(″sqlList″);if(sqlList==null)return;//分离每个sql语句,生成一个sql语句数组String[]sqlArr=new String(sqlList.getBytes(″ISO8859-1″)).split(″\\$″);Connection conn=null;Statement stmt=null;int retValue=0;try{//获取数据库连接Class.forName(″oraclejdbc.driver.OracleDriver″);conn=DriverManager.getConnection(″jdbc:oracle:thin:@10.10.0.8:1521:demoDB″,″demoUser″,″pwd1234″);stmt=conn.createStatement();//执行sql语句for(int i=0;i<sqlArr.length;i++){retValue=stmt.executeUpdate(sqlArr[i]);if(retValue<0){//如果出错,则中断循环break;}}}catch(Exception ex){ex.printStackTrace();}finally{//关闭数据库连接stmt.close();conn.close();}%></body><script language=″javascript″>function document.body.onload(){var retValue=<%=retValue%>;if(retValue>=0){alert(″数据保存成功″);parent.doInitStatus();//保存成功后,初始化数据展示页面的表单状态}else{alert(″数据保存失败″);}}</script></html> |
(2)采用本发明的数据展示方法
若采用本发明来实现图9的展示效果,则是先用DJFocus设计器进行可视化数据展示模型设计,建立数据展示模型。然后基于建立的数据展示模型进行数据的展示。
基于DJFocus的web开发组件实现图9所示的展示的步骤举例如下:
第一步:开发人员在DJFocus设计器中选择“新建模型”,在弹出的新建窗口中,根据需要展现的表格和数据库表的字段信息,确定表单展示风格和SQL查询语句,然后创建一个名为personList.xml的XML文档,此时所创建的XML文档就是数据展示模型XML文档,该文档保存在服务器上。图10为通过DJfocus设计器新建一个名为personList.xml的数据展示模型的界面示意图。
上述数据展示模型中,数据集定义可如下:
<datasource>
<sqlselect>select id,name,sex,age from person_info</sqlselect>
<table type=″table″>person_info</table>
<col tableid=1 type=″NUMBER″precision=″6″scale=″0″>id</col>
<col tableid=1 type=″VARCHAR″>name</col>
<col tableid=1 type=″CHAR″>sex</col>
<col tableid=1 type=″NUMBER″>age</col>
</datasource>
上述数据集定义包含了4个列:id,name,sex,age。这些列可以作为数据展示的数据项,放置在数据展示模型中指定的位置上,用来展示从数据库中检索出来的数据。
第二步:打开创建的数据展示模型XML文档,进行模型的属性设置。
在第一步创建模型时,使用的基本上都是默认的属性,这些属性通常不能完全满足需求,所以要在第二步进行详细的设置。
具体地,DJFocus组件可通过一个设计器画板打开创建的数据展示模型XML文档,自动生成一个初始的表格样式,开发人员在此基础上进一步设置表格的各种属性,即进行数据展示模型XML文档的编辑,比如:设置表格标题栏的背景、数据项字体、颜色等等。图11为通过DJFoucs Designer设计表单的界面示意图。设置完成之后,保存数据展示模型XML文档。保存的数据展示模型XML文档示例如表5所示。
表5.数据展示模型XML文档示例
<?xml version=″1.0″encoding=″UTF-8″?><dataobject version=″1.0″processing=″1″rowsperpage=″20″><gridlines color=″#000000″position=″61,162,283,384,485″/><datasource type=″sqlselect″><sqlselect>select ID,NAME,SEX,AGE from PERSON_INFO order byid</sqlselect><table schema=″DPSUSER″type=″TABLE″update=″yes″>person_info</table><col coltype=″string″type=″char″nullable=″no″precision=″3″scale=″0″tableid=″1″update=″yes″key=″yes″>id</col><col coltype=″string″type=″char″nullable=″no″precision=″10″scale=″0″tableid=″1″update=″yes″key=″no″>name</col><col coltype=″string″type=″char″nullable=″no″precision=″1″scale=″0″tableid=″1″update=″yes″key=″no″>sex</col><col coltype=″number″type=″NUMBER″nullable=″no″precision=″5″scale=″0″tableid=″1″update=″yes″key=″no″>age</col><filter/><sort>idA</sort></datasource><titlebar height=″0″backgroundcolor=″white″/><header height=″30″backgroundcolor=″white″/><detail height=″30″backgroundcolor=″white″/><summary height=″0″backgroundcolor=″white″/><footer height=″0″backgroundcolor=″white″/><text name=″text_1″band=″Header″align=″center″x=″61″y=″0″width=″100″height=″30″text=″编号″fontfamily=″宋体″fontsize=″14pt″backgroundcolor=″#f0f0f0″/><text name=″text_2″band=″Header″align=″center″x=″162″y=″0″ |
width=″120″height=″30″text=″姓名″fontfamily=″宋体″fontsize=″14pt″backgroundcolor=″#f0f0f0″/><text name=″text_3″band=″Header″align=″center″x=″283″y=″0″width=″100″height=″30″text=″性别″fontfamily=″宋体″fontsize=″14pt″backgroundcolor=″#f0f0f0″/><text name=″text_4″band=″Header″align=″center″x=″384″y=″0″width=″100″height=″30″text=″年龄″fontfamily=″宋体″fontsize=″14pt″backgroundcolor=″#f0f0f0″/><text name=″text_5″band=″Header″tag=″″text=″序号″align=″center″pointer=″default″color=″black″visible=″yes″backgroundcolor=″#f0f0f0″href=″″x=″0″y=″0″width=″60″height=″30″fontfamily=″宋体″fontsize=″14pt″fontweight=″normal″fontstyle=″normal″textdecoration=″none″border=″0″/><column name=″id″band=″Detail″taborder=″10″colid=″1″align=″left″x=″61″y=″0″width=″100″height=″30″formattype=″none″format=″″maxlength=″3″fontfamily=″宋体″fontsize=″14pt″><editmode type=″text″autoselection=″yes″/></column><column name=″name″band=″Detail″taborder=″20″colid=″2″align=″left″x=″162″y=″0″width=″120″height=″30″formattype=″none″format=″″maxlength=″10″fontfamily=″宋体″fontsize=″14pt″><editmode type=″text″autoselection=″yes″/></column><column name=″sex″band=″Detail″taborder=″30″colid=″3″align=″left″x=″283″y=″0″width=″100″height=″30″formattype=″none″format=″″maxlength=″1″fontfamily=″宋体″fontsize=″14pt″><editmode type=″select″><item value=″1″>男</item><item value=″0″>女</item></editmode></column><column name=″age″band=″Detail″taborder=″40″colid=″4″align=″right″x=″384″y=″0″width=″100″height=″30″formattype=″none″format=″″maxlength=″5″fontfamily=″宋体″fontsize=″14pt″><editmode type=″text″autoselection=″yes″/></column><compute name=″compute_1″band=″Detail″tag=″″expression=″RowNum()″ |
formattype=″none″format=″″align=″center″pointer=″default″color=″black″visible=″yes″backgroundcolor=″transparent″x=″0″y=″0″width=″60″height=″30″fontfamily=″宋体″fontsize=″14pt″fontweight=″normal″fontstyle=″normal″textdecoration=″none″border=″0″/></dataobject> |
第三步:使用数据展示模型XML文档。开发人员在客户端页面上利用标签库TagLib标签,引用数据展示模型,DJFocus组件会根据所引用的数据展示模型在客户端页面上创建相应的数据展示模型实例化对象,并同时创建三个子对象:数据定义对象、数据视图对象和数据操作对象。数据定义对象负责解析XML文档中的各个定义节点,然后由数据视图对象来负责展示。数据操作对象负责加载操作所需要的方法和事件。此时,还会创建本地数据缓存对象,但此时不填充具体的数据。
第四步:检索数据。开发人员通过客户端Script脚本调用检索数据的方法,数据展示模型实例化对象则向服务器端发送检索数据的请求,服务器端Servlet程序接收到请求之后,调用相应的JavaBean,JavaBean程序通过数据库适配器从数据库中获取到所需要的数据,并通过Servlet返回给客户端页面。此时,返回的数据就是以数据XML文档的形式返回的。返回的数据XML文档示例如表6所示。
表6.数据XML文档格式示例
<?xml version=″1.0″?><xmldata><transinfo><code>0</code><dbcode>0</dbcode><message></message><retrievedrows>3</retrievedrows></transinfo><dataset><r> |
<c>001</c><c>张三</c><c>0</c><c>36</c></r><r><c>002</c><c>李四</c><c>1</c><c>38</c></r><r><c>003</c><c>王五</c><c>1</c><c>42</c></r></dataset></xmldata> |
第五步:展示数据。客户端页面中的数据展示模型实例化对象接收到服务器端返回的数据XML文档后,将数据填充到本地数据缓存对象中,并同时把当前需要显示的数据填充到页面上的表单框架中,形成的表单如图9所示。
第六步:数据操作。展示在页面上的数据展示模型实例化对象是一个可交互的界面对象。数据展示模型实例化对象可调用各种方法(查询、增加、删除、替换、保存等)来实现与最终用户的交互,并可更新展示交互后的结果。当操作完成之后需要提交时,就要使用数据变更XML文档。数据变更XML文档可将本地交互所产生的数据变更按照增加、删除、替换进行分类汇总。上述数据变更XML文档通过客户端Script脚本采用AJAX技术与服务器端Servlet程序通信,提交数据变更XML文档到服务器端。服务器端通过Servlet程序调用JavaBean和数据库适配器,将数据变更提交到数据库中。然后通过Servlet返回本次提交是否成功的信息。客户端页面接收到服务器的返回信息后,提示最终用户本次操作是否成功。数据操作后生成的数据变更XML文档的示例如表7所示。
表7.数据变更XML文档示例
<?xml version=″1.0″?><xmldata><datasource><sqlselect>select ID,NAME,SEX,AGE from PERSON_INFO order by id</sqlselect><table schema=″DPSUSER″type=″TABLE″update=″yes″>person_info</table><col coltype=″string″type=″char″nullable=″no″precision=″3″scale=″0″tableid=″1″update=″yes″key=″yes″>id</col><col coltype=″string″type=″char″nullable=″no″precision=″10″scale=″0″tableid=″1″update=″yes″key=″no″>name</col><col coltype=″string″type=″char″nullable=″no″precision=″1″scale=″0″tableid=″1″update=″yes″key=″no″>sex</col><col coltype=″number″type=″NUMBER″nullable=″no″precision=″5″scale=″0″tableid=″1″update=″yes″key=″no″>age</col></datasource><updatelist><deletedrow><r><pk>003</pk></r></deletedrow><updatedrow><r><c>002</c><cs=″1″o=″李四″n=″0″>李四1</c><c>1</c><cs=″1″o=″38″n=″0″>33</c></r></updated row><insertedrow><r><cs=″2″n=″0″>005</c> |
<cs=″2″n=″0″>赵六</c><cs=″2″n=″0″>0</c><cs=″2″n=″0″>32</c></r></insertedrow></updatelist></xmldata> |
本实施例中基于DJFocus来实现图9所展示的表格的的脚本代码如表8所示。在页面上调用表8所示的脚本代码,去掉jsp和HTML页面所必需的代码外,用于数据展示和操作的脚本代码共计18行,代码行数不到传统方式的十分之一。
表8.基于DJFocus来实现图9所展示的表格的代码
djfocus_showData.jsp |
<%@page contentType=″text/html;charset=UTF-8″%><%@taglib uri=″/djfocus″prefix=″dj″%><html><head><title>DJFocus展示表单数据</title><meta http-equiv=″Content-Type″content=″text/html;charset=UTF-8″></head><style>button{font:9pt宋体;width:88;height:23;}</style><body><button id=btnAdd>添加行</button><button id=btnDelete>删除行</button><button id=btnSave>保存数据</button><hr><dj:dataview id=″dvl″dataObject=′/personList′style=″width:100%;height:400;″/></body><script language=″javascript″>//页面加载完毕事件function document.body.onload(){dvl.SetDBProfile(″demoDB″);//设置数据库连接dvl.Retrieve();//检索数据}//添加按钮点击事件 |
function btnAdd.onclick(){dvl.InsertRow(0);//添加数据}//删除按钮点击事件function btnDelete.onclick(){dvl.DeleteRow(0);//删除数据}//保存按钮点击事件function btnSave.onclick(){//保存数据if(dvl.Update()==1){alert(″数据保存成功″);}else{alert(″数据保存失败″);}}</script></html> |
通过上面的比较可以看出,与传统技术相比较,本发明具有可视化数据展示模型设计、数据展示模型可重用、封装性强、代码简洁等优点。
总之,本发明实施例通过设计可重用的数据展示模型,并提供数据展示模型解析、客户端数据展示与数据操作相关方法和事件,减少了二次开发阶段的工作量,可提高开发效率并减少脚本出错的机率。
本发明实施例还提供一种数据展示模型建立装置,如图12所示,该装置包括:
定义单元1201,用于进行数据展示模型定义,包括定义数据集及显示样式;
生成单元1202,用于根据所述数据展示模型定义生成数据展示模型可扩展标记语言XML文档;
存储单元1203,用于将所述数据展示模型XML文档存储在服务器。
在具体应用中,所述定义单元1201还用于定义数据展示模型中如下信息中的一项或多项:数据分组条件、数据排序条件、数据过滤条件及数据提交方式。
本实施例提供的数据展示模型建立装置可以为客户端或客户端的一部分,可用于实现前述的数据展示模型建立方法。
本发明实施例还提供一种数据展示装置,如图13所示,该数据展示装置1300包括:
第一发送单元1301,用于向服务器发送数据展示请求;
第一接收单元1302,用于接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;
创建单元1303,用于根据所述数据展示模型XML文档创建表单框架;
第二发送单元1304,用于向所述服务器发送数据检索请求,该请求中携带所述数据集定义;
解析引擎1305,用于接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,并将所述展示数据填充到所述表单框架中,形成表单并进行展示;
展示单元1306,用于展示所述表单。
在本发明具体应用中,该装置还可包括:
修改单元1307,用于对表单中的数据进行修改,并对修改后的数据设置修改状态标识。
提取单元1308,用于提取所述修改后的数据,生成数据变更XML文档;
提交单元1309,用于向所述服务器提交所述数据变更XML文档,以使所述服务器更新数据库。
本发明实施例提供的数据展示装置为客户端或客户端的一部分,可用于实现前述实施例中的数据展示方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,比如ROM/RAM、磁碟、光盘等。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种数据展示方法,其特征在于,包括:
向服务器发送数据展示请求;
接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;
根据所述数据展示模型XML文档创建表单框架;
向服务器发送数据检索请求,该请求中携带所述数据集定义;
接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,将所述展示数据填充到所述表单框架中,形成表单并进行展示。
2.根据权利要求1所述的方法,其特征在于,还包括:
创建本地数据缓存对象,并存储所述数据XML文档至本地数据缓存对象。
3.根据权利要求1所述的方法,其特征在于:
所述数据展示模型还包括如下信息中的一项或多项:检索参数定义、数据分组定义、数据排序定义、数据过滤定义以及数据提交方式定义。
4.根据权利要求1所述的方法,其特征在于,还包括:
对表单中的数据进行修改,对修改后的数据设置修改状态标识并进行存储。
5.根据权利要求4所述的方法,其特征在于,所述对表单中的数据进行修改包括:
增加、删除或替换表单中的数据。
6.根据权利要求4或5所述的方法,其特征在于,还包括:
提取所述修改后的数据,生成数据变更XML文档;
向所述服务器提交所述数据变更XML文档,以使所述服务器更新数据集定义中描述的数据库表。
7.根据权利要求1所述的方法,其特征在于:
所述显示样式定义包括如下定义中的一项或多项:表单布局定义、编辑模式定义、显示风格定义及界面对象定义。
8.一种数据展示模型建立方法,其特征在于,包括:
进行数据展示模型定义,包括定义数据集及显示样式;
根据所述数据展示模型定义生成数据展示模型可扩展标记语言XML文档;
将所述数据展示模型XML文档存储在服务器。
9.根据权利要求8所述的方法,其特征在于,所述进行数据展示模型定义还包括:
定义如下信息中的一项或多项:检索参数定义、数据分组条件、数据排序条件、数据过滤条件及数据提交方式。
10.根据权利要求8所述的方法,其特征在于:
所述显示样式包括如下信息中的一项或多项:表单布局、编辑模式、显示风格及界面对象。
11.一种数据展示装置,其特征在于,包括:
第一发送单元,用于向服务器发送数据展示请求;
第一接收单元,用于接收来自服务器的数据展示模型可扩展标记语言XML文档,该数据展示模型XML文档包括数据集定义以及显示样式定义;
创建单元,用于根据所述数据展示模型XML文档创建表单框架;
第二发送单元,用于向所述服务器发送数据检索请求,该请求中携带所述数据集定义;
解析引擎单元,用于接收来自服务器的数据XML文档,解析所述数据XML文档获得展示数据,并将所述展示数据填充到所述表单框架中,形成表单;
展示单元,用于展示所述表单。
12.根据权利要求11所述的装置,其特征在于,还包括:
修改单元,用于对表单中的数据进行修改,并对修改后的数据设置修改状态标识。
13.根据权利要求11所述的装置,其特征在于,还包括:
提取单元,用于提取所述修改后的数据,生成数据变更XML文档;
提交单元,用于向所述服务器提交所述数据变更XML文档,以使所述服务器更新数据集定义中描述的数据库表。
14.一种数据展示模型建立装置,其特征在于,包括:
定义单元,用于进行数据展示模型定义,包括定义数据集及显示样式;
生成单元,用于根据所述数据展示模型定义生成数据展示模型可扩展标记语言XML文档;
存储单元,用于将所述数据展示模型XML文档存储在服务器。
15.根据权利要求14所述的装置,其特征在于,
所述定义单元还用于定义数据展示模型中如下信息中的一项或多项:检索参数定义、数据分组条件、数据排序条件、数据过滤条件及数据提交方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910162784A CN101788994A (zh) | 2009-08-14 | 2009-08-14 | 一种数据展示模型建立方法、数据展示方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910162784A CN101788994A (zh) | 2009-08-14 | 2009-08-14 | 一种数据展示模型建立方法、数据展示方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101788994A true CN101788994A (zh) | 2010-07-28 |
Family
ID=42532210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910162784A Pending CN101788994A (zh) | 2009-08-14 | 2009-08-14 | 一种数据展示模型建立方法、数据展示方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101788994A (zh) |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102053838A (zh) * | 2010-12-31 | 2011-05-11 | 山东中创软件商用中间件股份有限公司 | 富客户平台中表格的创建方法及装置 |
CN102236709A (zh) * | 2011-07-01 | 2011-11-09 | 深圳中兴力维技术有限公司 | 一种基于Flex的监控页面显示方法及*** |
CN102306104A (zh) * | 2011-08-26 | 2012-01-04 | 深圳市万兴软件有限公司 | 一种实现应用程序自动更新的方法及装置 |
CN102567032A (zh) * | 2010-12-08 | 2012-07-11 | 金蝶软件(中国)有限公司 | 通用界面的配置方法及计算机 |
CN102902692A (zh) * | 2011-07-28 | 2013-01-30 | 腾讯科技(北京)有限公司 | 网络媒介信息的处理展示方法及*** |
CN102955694A (zh) * | 2011-08-31 | 2013-03-06 | 中国电信股份有限公司 | 基于WebKit 浏览器的客户端实现方法以及客户端 |
CN103064975A (zh) * | 2013-01-11 | 2013-04-24 | 北京亿赞普网络技术有限公司 | 一种在客户端展示信息的方法和*** |
CN103136201A (zh) * | 2011-11-22 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 页面信息的展示方法和装置 |
CN103345522A (zh) * | 2013-07-18 | 2013-10-09 | 北京润通丰华科技有限公司 | 数据的展示处理、展示方法及装置 |
CN103607434A (zh) * | 2013-11-04 | 2014-02-26 | 四川长虹电器股份有限公司 | 网络通信数据的交互方法 |
CN103701756A (zh) * | 2012-09-27 | 2014-04-02 | 中国电信股份有限公司 | web表单数据的保护方法、装置及web服务器 |
CN103885780A (zh) * | 2014-03-28 | 2014-06-25 | 深圳创维-Rgb电子有限公司 | 网站的开发方法及服务器 |
CN104252440A (zh) * | 2013-10-08 | 2014-12-31 | 深圳市华傲数据技术有限公司 | 一种单元格字体处理方法和装置 |
CN105260439A (zh) * | 2015-09-30 | 2016-01-20 | 小米科技有限责任公司 | 数据发布方法、装置及终端 |
CN105335159A (zh) * | 2015-11-03 | 2016-02-17 | 浪潮软件集团有限公司 | 一种anychart图表展示方法 |
WO2016095737A1 (zh) * | 2014-12-18 | 2016-06-23 | 阿里巴巴集团控股有限公司 | 客户端界面动态显示方法及其*** |
CN105786478A (zh) * | 2014-12-23 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 用于数据处理的方法及设备 |
CN105871998A (zh) * | 2015-12-18 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 一种数据展示方法及装置 |
CN105989010A (zh) * | 2015-01-28 | 2016-10-05 | 上海飞维信息技术有限公司 | 一种Web页面数据生成方法、WEBITOX服务器、Web应用*** |
CN107291940A (zh) * | 2017-07-07 | 2017-10-24 | 腾讯科技(深圳)有限公司 | 页面内容管理方法、装置及相关服务器 |
CN107391158A (zh) * | 2017-08-02 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种基于iDataTable封装实现表格绘制的方法及设备 |
CN103714509B (zh) * | 2013-12-20 | 2018-05-04 | 北京奇虎科技有限公司 | 在客户端与服务器之间进行数据交互的方法及*** |
CN108133015A (zh) * | 2017-12-22 | 2018-06-08 | 东软集团股份有限公司 | 表单数据留痕方法、装置、存储介质及电子设备 |
CN108132945A (zh) * | 2016-12-01 | 2018-06-08 | 百度在线网络技术(北京)有限公司 | 用于生成报表的方法和装置 |
CN108563621A (zh) * | 2018-04-28 | 2018-09-21 | 江苏国泰新点软件有限公司 | 一种pdf报表生成方法、装置、设备及存储介质 |
CN108614842A (zh) * | 2016-12-13 | 2018-10-02 | 北京国双科技有限公司 | 查询数据的方法和装置 |
CN109313415A (zh) * | 2016-07-05 | 2019-02-05 | 株式会社安川电机 | 产业机器控制装置的参数编辑装置、产业机器控制***、产业机器控制***的制造方法以及程序 |
CN109445794A (zh) * | 2018-11-12 | 2019-03-08 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109522139A (zh) * | 2018-11-23 | 2019-03-26 | 杭州数梦工场科技有限公司 | 一种数据表服务生成调用方法、装置、设备及存储介质 |
CN112862449A (zh) * | 2021-03-02 | 2021-05-28 | 岭东核电有限公司 | 结构化工单生成方法、装置、计算机设备和存储介质 |
CN112860254A (zh) * | 2021-02-07 | 2021-05-28 | 武汉蓝星科技股份有限公司 | 一种使用数据模型呈现列表控件的方法 |
-
2009
- 2009-08-14 CN CN200910162784A patent/CN101788994A/zh active Pending
Cited By (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567032B (zh) * | 2010-12-08 | 2016-01-20 | 金蝶软件(中国)有限公司 | 通用界面的配置方法及计算机 |
CN102567032A (zh) * | 2010-12-08 | 2012-07-11 | 金蝶软件(中国)有限公司 | 通用界面的配置方法及计算机 |
CN102053838A (zh) * | 2010-12-31 | 2011-05-11 | 山东中创软件商用中间件股份有限公司 | 富客户平台中表格的创建方法及装置 |
CN102236709A (zh) * | 2011-07-01 | 2011-11-09 | 深圳中兴力维技术有限公司 | 一种基于Flex的监控页面显示方法及*** |
CN102902692A (zh) * | 2011-07-28 | 2013-01-30 | 腾讯科技(北京)有限公司 | 网络媒介信息的处理展示方法及*** |
CN102306104A (zh) * | 2011-08-26 | 2012-01-04 | 深圳市万兴软件有限公司 | 一种实现应用程序自动更新的方法及装置 |
CN102955694A (zh) * | 2011-08-31 | 2013-03-06 | 中国电信股份有限公司 | 基于WebKit 浏览器的客户端实现方法以及客户端 |
CN102955694B (zh) * | 2011-08-31 | 2016-06-22 | 中国电信股份有限公司 | 基于WebKit 浏览器的客户端实现方法以及客户端 |
CN103136201A (zh) * | 2011-11-22 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 页面信息的展示方法和装置 |
CN103701756A (zh) * | 2012-09-27 | 2014-04-02 | 中国电信股份有限公司 | web表单数据的保护方法、装置及web服务器 |
CN103064975A (zh) * | 2013-01-11 | 2013-04-24 | 北京亿赞普网络技术有限公司 | 一种在客户端展示信息的方法和*** |
CN103345522B (zh) * | 2013-07-18 | 2018-10-19 | 北京润通丰华科技有限公司 | 数据的展示处理、展示方法及装置 |
CN103345522A (zh) * | 2013-07-18 | 2013-10-09 | 北京润通丰华科技有限公司 | 数据的展示处理、展示方法及装置 |
CN104252440A (zh) * | 2013-10-08 | 2014-12-31 | 深圳市华傲数据技术有限公司 | 一种单元格字体处理方法和装置 |
CN104252440B (zh) * | 2013-10-08 | 2017-05-17 | 深圳市华傲数据技术有限公司 | 一种单元格字体处理方法和装置 |
CN103607434A (zh) * | 2013-11-04 | 2014-02-26 | 四川长虹电器股份有限公司 | 网络通信数据的交互方法 |
CN103714509B (zh) * | 2013-12-20 | 2018-05-04 | 北京奇虎科技有限公司 | 在客户端与服务器之间进行数据交互的方法及*** |
CN103885780A (zh) * | 2014-03-28 | 2014-06-25 | 深圳创维-Rgb电子有限公司 | 网站的开发方法及服务器 |
CN105760149B (zh) * | 2014-12-18 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 客户端界面动态显示方法及其*** |
WO2016095737A1 (zh) * | 2014-12-18 | 2016-06-23 | 阿里巴巴集团控股有限公司 | 客户端界面动态显示方法及其*** |
CN105760149A (zh) * | 2014-12-18 | 2016-07-13 | 阿里巴巴集团控股有限公司 | 客户端界面动态显示方法及其*** |
CN105786478B (zh) * | 2014-12-23 | 2019-07-02 | 菜鸟智能物流控股有限公司 | 用于数据处理的方法及设备 |
CN105786478A (zh) * | 2014-12-23 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 用于数据处理的方法及设备 |
CN105989010A (zh) * | 2015-01-28 | 2016-10-05 | 上海飞维信息技术有限公司 | 一种Web页面数据生成方法、WEBITOX服务器、Web应用*** |
CN105260439B (zh) * | 2015-09-30 | 2019-02-12 | 小米科技有限责任公司 | 数据发布方法、装置及终端 |
CN105260439A (zh) * | 2015-09-30 | 2016-01-20 | 小米科技有限责任公司 | 数据发布方法、装置及终端 |
CN105335159B (zh) * | 2015-11-03 | 2018-11-02 | 浪潮软件集团有限公司 | 一种anychart图表展示方法 |
CN105335159A (zh) * | 2015-11-03 | 2016-02-17 | 浪潮软件集团有限公司 | 一种anychart图表展示方法 |
CN105871998A (zh) * | 2015-12-18 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 一种数据展示方法及装置 |
CN109313415A (zh) * | 2016-07-05 | 2019-02-05 | 株式会社安川电机 | 产业机器控制装置的参数编辑装置、产业机器控制***、产业机器控制***的制造方法以及程序 |
CN109313415B (zh) * | 2016-07-05 | 2022-08-09 | 株式会社安川电机 | 产业机器控制装置的参数编辑装置、产业机器控制***、产业机器控制***的制造方法以及存储介质 |
CN108132945A (zh) * | 2016-12-01 | 2018-06-08 | 百度在线网络技术(北京)有限公司 | 用于生成报表的方法和装置 |
CN108614842A (zh) * | 2016-12-13 | 2018-10-02 | 北京国双科技有限公司 | 查询数据的方法和装置 |
CN107291940A (zh) * | 2017-07-07 | 2017-10-24 | 腾讯科技(深圳)有限公司 | 页面内容管理方法、装置及相关服务器 |
CN107391158A (zh) * | 2017-08-02 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种基于iDataTable封装实现表格绘制的方法及设备 |
CN108133015A (zh) * | 2017-12-22 | 2018-06-08 | 东软集团股份有限公司 | 表单数据留痕方法、装置、存储介质及电子设备 |
CN108563621A (zh) * | 2018-04-28 | 2018-09-21 | 江苏国泰新点软件有限公司 | 一种pdf报表生成方法、装置、设备及存储介质 |
CN108563621B (zh) * | 2018-04-28 | 2022-08-05 | 国泰新点软件股份有限公司 | 一种pdf报表生成方法、装置、设备及存储介质 |
CN109445794B (zh) * | 2018-11-12 | 2022-01-28 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109445794A (zh) * | 2018-11-12 | 2019-03-08 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109522139A (zh) * | 2018-11-23 | 2019-03-26 | 杭州数梦工场科技有限公司 | 一种数据表服务生成调用方法、装置、设备及存储介质 |
CN112860254A (zh) * | 2021-02-07 | 2021-05-28 | 武汉蓝星科技股份有限公司 | 一种使用数据模型呈现列表控件的方法 |
CN112862449A (zh) * | 2021-03-02 | 2021-05-28 | 岭东核电有限公司 | 结构化工单生成方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101788994A (zh) | 一种数据展示模型建立方法、数据展示方法及装置 | |
US6651055B1 (en) | OLAP query generation engine | |
US8959122B2 (en) | Data processing device | |
CA2669479C (en) | Generating end-user presentations from structured data | |
US5455945A (en) | System and method for dynamically displaying entering, and updating data from a database | |
US7165073B2 (en) | Dynamic, hierarchical data exchange system | |
US8756495B2 (en) | Computer-implemented system and method for tagged and rectangular data processing | |
US20110087708A1 (en) | Business object based operational reporting and analysis | |
US8341512B2 (en) | Method for capturing design-time and run-time formulas associated with a cell | |
US20030074419A1 (en) | System and method for non-programmers to dynamically manage multiple sets of XML document data | |
CA2412318A1 (en) | Method and apparatus for efficient management of xml documents | |
US6915303B2 (en) | Code generator system for digital libraries | |
KR20090028758A (ko) | 정보 재사용 방법, 정보 제공 방법, 편집 가능한 문서, 및 문서 편집 시스템 | |
US9805112B2 (en) | Method and structure for managing multiple electronic forms and their records using a static database | |
US20080263142A1 (en) | Meta Data Driven User Interface System and Method | |
CN116468010A (zh) | 报表生成方法、装置、终端及存储介质 | |
CN101794223B (zh) | Wade服务消息架构的设计方法 | |
US20110184975A1 (en) | Incorporated web page content | |
Zhao | The database construction of intangible cultural heritage based on artificial intelligence | |
US20240037325A1 (en) | Ability to add non-direct ancestor columns in child spreadsheets | |
JP5056384B2 (ja) | 検索プログラム、方法及び装置 | |
WO2010147453A1 (en) | System and method for designing a gui for an application program | |
Coles | Pro T-SQL 2008 programmer's guide | |
JP3842574B2 (ja) | 情報抽出方法および構造化文書管理装置およびプログラム | |
Reitsma et al. | Relational (TE 1.0) vs. NoSQL (TE 2.0) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100728 |