一种基于XML文档描述的界面生成方法和装置转让专利

申请号 : CN200810117277.7

文献号 : CN101334728B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吕江花郑雯李先军余丹李重文

申请人 : 北京航空航天大学

摘要 :

本发明提出了一种基于XML文档描述的界面生成方法和平台。界面生成引擎查找编写好的界面请求映射文件,获取样式描述文档的存储地址,并查找样式描述文档,调用样式文档解析模块生成对应的样式模型树,根据样式模型树的根节点属性设置界面布局,并以深度优先方式遍历,采用反射机制和脚本方式生成样式模型树的叶节点对应界面控件的监听器的事件执行代码,生成界面控件并形成最终界面。采用样式模型缓存界面样式描述文件,减少了界面生成引擎读取文件的次数,提高界面生成引擎的执行效率;分析特定应用背景下的界面的特点,预编写反映通用界面需求的模板文件,通过引用这些模板文件,提高已有工作的可复用性,减少二次开发阶段的工作量。

权利要求 :

1.一种基于XML文档描述的界面生成方法,其特征在于,包括如下步骤: 步骤一:样式文档生成模块根据数据资源中已存在界面控件信息,从数据资源中读取界面控件信息,并将资源类型传递给数据驱动模块,数据驱动模块查找数据资源,并将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块,样式文档生成模块根据这些界面控件信息和附加的业务数据生成样式描述文档集合,并存储于系统指定目录; 步骤二:编写界面请求映射文件,供界面生成引擎调用,提供界面请求与样式描述文档路径的映射关系; 步骤三:提交的界面请求发送给界面生成引擎,界面生成引擎根据界面请求顺序查找界面请求映射文件,获取样式描述文档的存储地址,并查找样式描述文档;若与界面请求相一致的样式描述文档不存在,则返回相应的提示信息,界面生成流程结束;若该文档存在,则界面生成引擎根据样式描述文档,调用样式文档解析模块生成与样式描述文档对应的样式模型树; 步骤四:界面生成引擎得到样式模型树根节点,根据根节点属性设置界面布局,接着以深度优先方式遍历此样式模型树;

步骤五:如果遍历的当前节点为叶节点,则生成界面控件,设置界面控件的静态属性并依据在样式描述文档中的事件类型在此控件的事件监听器中嵌入事件体;若当前控件对应的事件含有多个操作,且其中又包含嵌套调用,则事件处理采用反射方式执行;反射类定义事件包含的所有操作,通过反射机制生成反射类的实例,利用所调用的实例的方法实现事件体;反之,则事件处理采用脚本方式执行;脚本中定义事件体,通过调用脚本解析器提供的API执行脚本,实现事件体;若当前节点为中间节点,则继续遍历;直至样式模型树的所有节点遍历完毕。

2.根据权利要求1所述一种基于XML文档描述的界面生成方法,其特征在于:所述步骤一中的样式描述文档根据应用需求生成,生成时为样式描述文档的集合,用以描述界面控件的布局信息、属性信息以及事件信息。

3.根据权利要求1所述一种基于XML文档描述的界面生成方法,其特征在于:所述步骤一中的如果数据资源中不存在界面控件信息,样式描述文档直接采用XML编辑器手工编写得到,并存储于系统指定目录。

4.根据权利要求1所述一种基于XML文档描述的界面生成方法,其特征在于:所述步骤一中的样式描述文档采用统一的描述规范,此描述规范用一个schema文件描述,根节点表示最终生成界面,中间节点表示一个界面控件组,叶节点表示界面包含的控件;其中,根节点是中间节点的有序集合,中间节点是叶节点的有序集合,各个中间节点的相对顺序代表了在最终界面上各组控件的相对顺序,一中间节点的各个叶节点的相对顺序代表了一组控件中的各控件相对顺序;中间节点表示的界面控件组内容既能够来自已有的模板样式描述文档,也能够由一组叶节点构成。

5.根据权利要求1所述一种基于XML文档描述的界面生成方法,其特征在于:所述步骤二中的界面请求映射文件采用一个schema文件描述,其中叶节点代表界面请求标识符和样式描述文档存储路径之间的一对一映射关系。

6.根据权利要求1所述一种基于XML文档描述的界面生成方法,其特征在于:所述步骤三中的样式文档解析模块解析样式描述文档;若读取的当前节点是中间节点,且其子节点来自已有的模板样式描述文档,则继续读取模板文件内容,将模板文件中叶节点添加入现有样式模型,如果其子节点直接存在于本样式描述文档中,则将此中间节点的子节点写入样式模型;若样式模型树的当前节点为叶节点,则直接将其写入样式模型;直至解析过程结束,得到样式模型树。

7.一种基于XML文档描述的界面生成装置,其特征在于,包括如下模块:

样式文档生成模块,根据数据资源中已存在界面控件信息,从数据资源中读取界面控件信息,并将资源类型传递给数据驱动模块;并根据数据驱动模块返回的原始数据资源相应的文件格式生成样式描述文档的集合,并存储于系统指定目录;所述的数据驱动模块根据资源类型查找数据资源,并将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块;

界面请求映射文件,供界面生成引擎调用,提供界面请求与样式描述文档路径的映射关系;

界面生成引擎,根据提交的界面请求顺序查找界面请求映射文件,获取样式描述文档的存储地址,并查找样式描述文档;若与界面请求相一致的样式描述文档不存在,则返回相应的提示信息,界面生成流程结束;若该文档存在,则根据样式描述文档,调用样式文档解析模块,生成与样式描述文档对应的样式模型树;并得到样式模型树根节点,根据根节点属性设置界面布局,接着以深度优先方式遍历此样式模型树;如果遍历的当前节点为叶节点,则生成界面控件,设置界面控件的静态属性并依据在样式描述文档中的事件类型在此控件的事件监听器中嵌入事件体;若本控件对应的事件含有多个操作,且其中又包含嵌套调用,则事件处理采用反射方式执行;反射类定义事件包含的所有操作,通过反射机制生成反射类的实例,利用所调用的实例的方法实现事件体;反之,则事件处理采用脚本方式执行;脚本中定义事件体,通过调用脚本解析器提供的API执行脚本,实现事件体;若当前节点为中间节点,则继续遍历;直至样式模型树的所有节点遍历完毕。

8.根据权利要求7所述一种基于XML文档描述的界面生成装置,其特征在于:所述样式文档生成模块根据应用需求生成样式描述文档,生成时为样式描述文档的集合,用以描述界面控件的布局信息、属性信息以及事件信息。

9.根据权利要求7所述一种基于XML文档描述的界面生成装置,其特征在于:所述样式文档生成模块中如果数据资源中不存在界面控件信息,样式描述文档直接采用XML编辑器手工编写得到,并存储于系统指定目录。

10.根据权利要求7所述一种基于XML文档描述的界面生成装置,其特征在于:所述样式文档生成模块生成的样式描述文档采用统一的描述规范,此描述规范用一个schema文件描述,根节点表示最终生成界面,中间节点表示一个界面控件组,叶节点表示界面包含的控件;其中,根节点是中间节点的有序集合,中间节点是叶节点的有序集合,各个中间节点的相对顺序代表了在最终界面上各组控件的相对顺序,一中间节点的各个叶节点的相对顺序代表了一组控件中的各控件相对顺序;中间节点表示的界面控件组内容既能够来自已有的模板样式描述文档,也能够由一组叶节点构成。

11.根据权利要求7所述一种基于XML文档描述的界面生成装置,其特征在于:所述界面请求映射文件采用一个schema文件描述,其中叶节点代表界面请求标识符和样式描述文档存储路径之间的一对一映射关系。

12.根据权利要求7所述一种基于XML文档描述的界面生成装置,其特征在于:所述样式文档解析模块解析样式描述文档;若读取的当前节点是中间节点,且其子节点来自已有的模板样式描述文档,则继续读取模板文件内容,将模板文件中叶节点添加入现有样式模型,如果其子节点直接存在于本样式描述文档中,则将此中间节点的子节点写入样式模型;

若样式模型树的当前节点为叶节点,则直接将其写入样式模型;直至解析过程结束,得到样式模型树。

说明书 :

一种基于XML文档描述的界面生成方法和装置

技术领域

[0001] 本发明属于计算机应用领域,涉及一种界面生成方法和平台,具体涉及一种基于XML文档描述的界面生成方法和平台。

背景技术

[0002] 随着计算机技术的不断发展,交互式界面生成技术越来越受到关注。反射技术提供了一种在运行时环境中,程序动态获取和维护类信息、调用类对象的方法的手段。目前的主流编程语言都实现了对反射技术的支持,例如,Java语言中的java.lang.reflect包封装了若干API,通过这些API,可以运行时加载和使用编译期间程序未知的类。由于反射技术具有不需要提前对目标类进行编译的特性,它可以用来实现动态界面控件关联事件。反射技术虽然能够实现复杂的控件事件,但对于处理某些数量众多的界面控件所关联的简单控件事件则会导致大量的编码工作。
[0003] Java脚本语言允许在运行时环境中,修改变量的类型及内容,以及改变自身执行逻辑。BSH脚本解释器是用Java写成的小型嵌入式的Java源代码解释器,它使用Java反射API来实时解释执行Java语句和表达式,并可以透明地访问任何Java对象和API,用来在运行时动态执行预定义Java脚本实现控件关联事件,但是其实现逻辑不易理解,且没有成熟的编辑环境,因而仅能依靠开发人员本身来保证脚本书写的正确性,不适合编写界面控件所关联的复杂控件事件。
[0004] 目前,在一般的交互式软件开发过程中,常用的开发方式是采用硬编码的方式生成交互界面。由于硬编码方法可以实现设计层次非常复杂,控件非常丰富的用户界面,在界面代码编写量不大的情况下,具有较高的应用价值。但在需要根据不同的界面请求创建出不同的界面,而且界面请求数量众多的情况下,采用硬编码方式就会导致开发效率的低下,软件可维护性和可扩展性的降低。另外,硬编码的界面生成方法没有将业务逻辑和界面应用逻辑分离,两者相混杂的结果会导致开发过程的混乱、程序逻辑的不易理解,主要表现在以下两个方面:
[0005] (1)系统开发效率不高。由于界面请求数量众多,就需要为每一个界面请求编写其业务逻辑和界面逻辑,另外界面请求的界面控件无论在外观、布局或者操作上呈现很大的相似性,导致很多编码都是简单的重复性劳动。而业务逻辑和界面逻辑紧耦合性,使得系统开发人员不仅要关注业务功能的具体实现,还要考虑交互界面的设计和呈现方式,无法将全部精力集中在业务逻辑的实现上,影响了系统开发的效率。
[0006] (2)系统可维护性和可扩展性不高。对于每一个新增的界面请求,都需要重新编写一套界面逻辑,已有工作的复用性很低,并且需要重新编译系统和部署,二次开发效率低下。另外由于界面生成模型和业务模型混合在一起使用,当业务模型发生改变时,界面模型也随之发生相应的改变,工作量大并且容易产生新的错误;同时,随着界面复杂程度的增加,界面模型的复杂度也会加大,实现界面模型也会变得十分困难。造成系统的可维护性和可扩展性都很低。
[0007] 目前提出的界面生成方法在界面请求数目众多的情况下,定制界面开发的复杂度较大,代码共享度低,尤其无法减少二次开发的工作量,降低了系统的可维护性和可扩展性。

发明内容

[0008] 本发明的目的是提供一种基于XML文档描述的界面生成方法和平台。根据界面请求,界面生成引擎调用已编辑好的样式描述文档生成界面信息模型,进而生成界面控件,并实现界面控件的关联事件。本方法采用了业务模型和界面模型分离的方法和模块化的设计思路,简化开发步骤,降低编码量,提高开发效率,并且各种界面需求都可以生成外观、风格一致的用户界面,提高了用户体验。
[0009] 一种基于XML文档描述的界面生成方法,包括如下步骤:
[0010] 步骤1:样式文档生成模块根据数据资源中已存在界面控件信息,从数据资源中读取界面控件信息,并将资源类型传递给数据驱动模块,数据驱动模块查找数据资源,并将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块,样式文档生成模块根据这些界面控件信息和附加的业务数据生成样式描述文档集合,并存储于系统指定目录。
[0011] 步骤2:编写界面请求映射文件,供界面生成引擎调用,提供界面请求与样式描述文档路径的映射关系。
[0012] 步骤3:提交的界面请求发送给界面生成引擎,界面生成引擎根据界面请求顺序查找界面请求映射文件,获取样式描述文档的存储地址,并查找样式描述文档;若与界面请求相一致的样式描述文档不存在,则返回相应的提示信息,界面生成流程结束;若该文档存在,则界面生成引擎根据样式描述文档,调用样式文档解析模块生成与样式描述文档对应的样式模型树。
[0013] 步骤4:界面生成引擎得到样式模型树根节点,根据根节点属性设置界面布局,接着以深度优先方式遍历此样式模型树。
[0014] 步骤5:如果遍历的当前节点为叶节点,则生成界面控件,设置界面控件的静态属性并依据在样式描述文档中的事件类型在此控件的事件监听器中嵌入事件体;若当前控件对应的事件含有多个操作,且其中又包含嵌套调用,则事件处理采用反射方式执行;反射类定义事件包含的所有操作,通过反射机制生成反射类的实例,利用所调用的实例的方法实现事件体; 反之,则事件处理采用脚本方式执行;脚本中定义事件体,通过调用脚本解析器提供的API执行脚本,实现事件体;若当前节点为中间节点,则继续遍历;直至样式模型树的所有节点遍历完毕。
[0015] 所述步骤1中的样式描述文档根据应用需求生成,生成时为样式描述文档的集合,用以描述界面控件的布局信息、属性信息以及事件信息。
[0016] 所述步骤1中的如果数据资源中不存在界面控件信息,样式描述文档直接采用XML编辑器手工编写得到,并存储于系统指定目录。
[0017] 所述步骤1中的样式描述文档采用统一的描述规范,此描述规范用一个schema文件描述,根节点表示最终生成界面,中间节点表示一个界面控件组,叶节点表示界面包含的控件;其中,根节点是中间节点的有序集合,中间节点是叶节点的有序集合,各个中间节点的相对顺序代表了在最终界面上各组控件的相对顺序,一中间节点的各个叶节点的相对顺序代表了一组控件中的各控件相对顺序;中间节点表示的界面控件组内容既能够来自已有的模板样式描述文档,也能够由一组叶节点构成。
[0018] 所述步骤2中的界面请求映射文件采用schema描述,其中叶节点代表界面请求标识符和样式描述文档存储路径之间的一对一映射关系。
[0019] 所述步骤3中的样式文档解析模块解析样式描述文档;若读取的当前节点是中间节点,且其子节点来自已有的模板样式描述文档,则继续读取模板文件内容,将模板文件中叶节点添加入现有样式模型,如果其子节点直接存在于本样式描述文档中,则将此中间节点的子节点写入样式模型;若样式模型树的当前节点为叶节点,则直接将其写入样式模型;直至解析过程结束,得到样式模型树。
[0020] 一种基于XML文档描述的界面生成平台,包括如下模块:
[0021] 样式文档生成模块,根据数据资源中已存在界面控件信息,从数据资源中读取界面控件信息,并将资源类型传递给数据驱动模块;并根据返回的原始数据资源相应的文件格式生成样式描述文档的集合,并存储于系统指定目录。
[0022] 数据驱动模块,根据资源类型查找数据资源,并将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块。
[0023] 界面请求映射文件,供界面生成引擎调用,提供界面请求与样式描述文档路径的映射关系。
[0024] 界面生成引擎,根据提交的界面请求顺序查找界面请求映射文件,获取样式描述文档的存储地址,并查找样式描述文档;若与界面请求相一致的样式描述文档不存在,则返回相应的提示信息,界面生成流程结束;若该文档存在,则根据样式描述文档,生成与之对应的样式模型树;并得到样式模型树根节点,根据根节点属性设置界面布局,接着以深度优先方式 遍历此样式模型树;如果遍历的当前节点为叶节点,则生成界面控件,设置界面控件的静态属性并依据在样式描述文档中的事件类型在此控件的事件监听器中嵌入事件体;若此控件对应的事件含有多个操作,且其中又包含嵌套调用,则事件处理采用反射方式执行;反射类定义事件包含的所有操作,通过反射机制生成反射类的实例,利用所调用的实例的方法实现事件体;反之,则事件处理采用脚本方式执行;脚本中定义事件体,通过调用脚本解析器提供的API执行脚本,实现事件体;若当前节点为中间节点,则继续遍历;直至样式模型树的所有节点遍历完毕。
[0025] 样式文档解析模块,生成与样式描述文档对应的样式模型树。 [0026] 所述样式文档生成模块根据应用需求生成样式描述文档,生成时为样式描述文档的集合,用以描述界面控件的布局信息、属性信息以及事件信息。
[0027] 所述样式文档生成模块中如果数据资源中不存在界面控件信息,样式描述文档直接采用XML编辑器手工编写得到,并存储于系统指定目录。
[0028] 所述样式文档生成模块生成的样式描述文档采用统一的描述规范,此描述规范用一个schema文件描述,根节点表示最终生成界面,中间节点表示一个界面控件组,叶节点表示界面包含的控件;其中,根节点是中间节点的有序集合,中间节点是叶节点的有序集合,各个中间节点的相对顺序代表了在最终界面上各组控件的相对顺序,一中间节点的各个叶节点的相对顺序代表了一组控件中的各控件相对顺序;中间节点表示的界面控件组内容既能够来自已有的模板样式描述文档,也能够由一组叶节点构成。
[0029] 所述界面请求映射文件采用一个schema文件描述,其中叶节点代表界面请求标识符和样式描述文档存储路径之间的一对一映射关系。
[0030] 所述样式文档解析模块解析样式描述文档;若读取的当前节点是中间节点,且其子节点来自已有的模板样式描述文档,则继续读取模板文件内容,将模板文件中叶节点添加入现有样式模型,如果其子节点直接存在于本样式描述文档中,则将此中间节点的子节点写入样式模型;若样式模型树的当前节点为叶节点,则直接将其写入样式模型;直至解析过程结束,得到样式模型树。
[0031] 本发明一种基于XML文档描述的界面生成方法和平台,相对于传统的设计方式,本发明的优点在于:
[0032] (1)本发明降低了系统开发的复杂性。由于界面设计工作与系统功能实现工作分离,将系统开发人员从繁冗的界面设计工作中解脱出来,更多的精力可以放在系统的设计和功能的实现上。而界面开发人员可以通过对具体业务的深入研究,设计更贴近用户使用习惯和方式的用户界面。
[0033] (2)本发明有助于提高系统的可维护性和可扩展性。修改样式描述文档就可以实现对界面 上控件的增加、删除、更新等操作,并且这些改变在下次界面请求到来时就可以呈现出来,不需要重新编译和部署系统。避免了硬编码方式中,所有内容混杂在一起的缺点,对系统的维护和新界面生成需求的满足提供了便利。
[0034] (3)本发明有助于提高系统开发过程对已有工作的复用性。根据对系统界面需求的分析和总结,构造一些代表一类通用界面需求的模板界面文档,编写样式描述文档时直接引用这些模板界面文档,从而提高已有工作的复用性。随着系统开发的进行,模板界面文档会逐渐积累,其可复用度提高,进一步提高系统开发效率。
[0035] (4)本发明采用反射和脚本技术相结合的方式实现控件关联事件,当控件对应的事件含有多个操作,且其中又包含嵌套调用的情况下采用反射技术,其他情况则采用脚本技术。两种技术分别处理自己优势的事件类型,从而增强了平台应对控件事件的灵活性,并提高开发效率。

附图说明

[0036] 图1为本发明一种基于XML文档描述的界面生成方法的模块关系图; [0037] 图2为本发明一种基于XML文档描述的界面生成方法的流程图; [0038] 图3为本发明一种基于XML文档描述的界面生成方法的样式描述文档格式规范schema;
[0039] 图4为本发明一种基于XML文档描述的界面生成方法的样式描述文档实例; [0040] 图5为本发明一种基于XML文档描述的界面生成方法的界面请求映射文件格式规范schema;
[0041] 图6为本发明一种基于XML文档描述的界面生成方法的界面请求映射文件实例; [0042] 图7为本发明一种基于XML文档描述的界面生成方法和平台的界面生成效果图。 [0043] 图中:1.样式文档生成模块 101.样式描述文档 102.业务数据 2.数据驱动模块3.界面生成引擎 301.最终界面 302.SWT控件集 4.样式文档解析模块401.样式模型树 5.界面请求映射文件 6.数据资源

具体实施方式

[0044] 下面将结合附图和实施例对本发明作进一步的详细说明。
[0045] 一种基于XML文档描述的界面生成平台,如图1所示,包括样式文档生成模块1、数据驱动模块2、界面生成引擎3、样式文档解析模块4和界面请求映射文件5。样式文档生成模块1根据需求生成样式描述文档101。数据驱动模块2根据样式文档生成模块1的控制信息在数据资源6中查找对应的数据资源,并将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块1。界面生成引擎3根据样式模型树401和界面请求映射文件5并调用SWT控件集302生成最终界面301。样式文档解析模块1生成与样式描述文档101 对应的样式模型树401。界面请求映射文件5提供了界面请求与样式描述文档101路径的映射关系。
[0046] 界面请求通过界面生成引擎3提交,界面生成引擎3根据界面请求顺序查找编写好的界面请求映射文件5,获取样式描述文档101的存储地址。样式文档生成模块1连接数据驱动模块2,将数据资源6中的界面控件信息传递给数据驱动模块2,数据驱动模块2将界面控件信息以原始数据资源相应的文件格式返回给样式文档生成模块1,样式文档生成模块1根据得到的界面控件信息和附加的业务数据102生成样式描述文档101的集合。界面生成引擎3查找样式描述文档101,调用样式文档解析模块4生成与样式描述文档101对应的样式模型树401。界面生成引擎3得到样式模型树401的根节点,根据根节点属性设置界面布局,接着以深度优先方式遍历此样式模型树401,用反射机制和脚本方式生成样式模型树401的叶节点对应界面控件的监听器的事件执行代码,调用SWT控件集302生成界面控件并形成最终界面301。
[0047] 一种基于XML文档描述的界面生成方法,结合图2说明其流程,包括如下步骤: [0048] 步骤一:样式文档生成模块1根据需求生成样式描述文档101。样式描述文档101有两种生成方式,如果数据资源6中不存在界面控件信息,则使用XML编辑器手工编写;反之则由样式文档生成模块1调用数据驱动模块2实现,数据驱动模块2访问数据资源6得到界面样式信息,界面样式信息在数据资源6中的存储格式依照数据资源类型各有不同,例如,数据库中则按字段存储,文件中则以文本方式存储。通过屏蔽数据来源的差异以及不同数据来源其数据格式的不同,数据驱动模块2为样式文档生成模块1提供一个一致的调用接口。
[0049] 本实施例中,界面样式信息由数据驱动模块2访问数据资源6得到,资源类型为数据库资源,采用的数据库为Oracle9i,版本号为9.2.0.1.0。样式文档生成模块1将资源类型发送给数据驱动模块2,数据驱动模块2根据此资源类型连接相应的数据资源6。数据驱动模块2连接数据库UIDB,从数据库中查找界面样式信息表UIINFO,得到所需记录构成的结果集,并返回给样式文档生成模块1,后者依照样式描述文档规范schema,遍历该结果集,根据需要添加业务数据102生成样式描述文档101的集合。这些样式描述文档101描述了针对不同界面请求的目标界面的布局信息、控件的属性信息和事件信息,并存储于系统指定目录下。采用界面控件描述规范schema可以使生成的界面控件描述文档具有统一的格式,从而界面生成引擎3可以采用同一个方法生成界面,提高生成效率。 [0050] 样式描述文档101的规范schema具体内容如图3所示,包括以下内容:界面标示Page,包括布局信息(layout)和组标示(Group);组标示Group,包括组标识符(name)、引用模板文件路径(reuseRef)和控件标示(Control);控件标示Control,包括属性信息(标识符name、控件数据来源类型dsType、控件数据源dataSource、是否可编辑标示editable、 控件类型ctrType)和事件信息(事件类型eventType、事件体eventMethod)。 [0051] 以样式描述文档101采用样式描述文档集合中的fromDBUI.xml为例进行说明各个属性的具体含义。如图4所示,Page表示一个界面,其布局属性layout值为“grid”,表示采用GridLayout来设置界面上控件的布局。Group表示一个可复用的界面控件组,其属性name值为“upGroup”,即其标识符;属性reuseRef值为“getInstComp.xml”,表示upGroup的内容来自getInstComp.xml文件,这样引用现有的模板文件既能减少界面开发人员的工作量,也可缩短文档长度,使其便于开发人员理解;若属性reuseRef值为空,则表示本Group内容由Control的有序集合构成。Control表示界面控件,其属性name表示本控件的标识符,值为“checkbutton_1”;属性dsType表示控件的数据来源类型,有3种可选项:如果dsType的值为0,表示控件数据值为属性dataSource的值,直接读取dataSource的值即可;如果dsType的值为1,表示控件数据来源于dataSource属性,但需要按照自定义规则解析后才能得到真正的控件数据;如果dsType的值为2,表示控件数据具体由业务数据来决定,属性dataSource的值为业务数据的接口,引擎通过调用此接口,得到真正的控件数据。此处属性daType值为0,说明dataSource属性值即本控件的数据内容;属性editable用来指示控件是否可编辑,此处值为true,说明此控件可编辑;属性ctrType为“checkbutton”,即这个控件类型为复选按钮;属性eventType表示与控件关联的事件类型,有3种选项:如果eventType的值为0,表示本控件无关联事件;如果eventType的值为1,表示以脚本方式执行事件;如果eventType的值为2,表示以反射方式执行事件。此处属性eventType值为1,说明这个控件关联的事件采用脚本方式实现;本实施例中其他的xml文件的相应标示也相同。
[0052] 在此文档中,Page是Group的有序集合,Group是Control的有序集合,各个Group的相对顺序代表了在最终界面上的各Group的相对顺序,各个Control的相对顺序也代表了在最终界面上的一个Group中Control的相对顺序。
[0053] 步骤二:编写界面请求映射文件5,供界面生成引擎3调用,提供界面请求与样式描述文档101路径的一对一映射关系;
[0054] 界面请求映射文件5的schema如图5所示,包括如下内容:根标示Root,包括映射标示(Mapping);映射标示Mapping,包括界面请求(UIID)和样式描述文档101的路径(Path)。
[0055] 下面根据界面请求映射文件5的schema编写示例界面请求映射文件mapping.xml,如图6所示,叶节点Mapping表示一个界面请求-样式描述文档101的映射关系,如果到来的界面请求UIID为字符串“1”,则对应的样式描述文档101的路径Path为fromDBUI.xml,这个文档路径会返回给界面生成引擎3。通过这个文档的映射作用,将由 引擎无法解析的界面请求信息得到其能够解析的路径信息。
[0056] 步骤三:界面请求发送给界面生成引擎3,顺序查找界面请求映射配置文件5,根据得到的路径查找对应的样式描述文档101并生成与之对应的样式模型树401。 [0057] 本实施例中,界面请求为字符串“1”,当界面生成引擎3得到此界面请求后,遍历界面请求映射文件mapping.xml获取样式描述文档101的存储路径fromDBUI.xml。若在系统指定目录下查找fromDBUI.xml不成功,则返回相应的提示信息,界面生成流程结束;若查找成功,则界面生成引擎3调用样式文档解析模块4提供的getParser()接口,得到解析器实例,解析器实例调用JDOM API,以样式描述文档101绝对路径作为参数传入JDOM API中的parse(String path)方法,解析得到界面信息模型。解析过程中,若Group的reuseRef属性值不为空,则继续读取模板文件内容,将其内容添加入现有样式模型树401。直至解析流程结束,样式模型树401生成完毕。
[0058] 本实施例中生成的样式模型树401的根节点为ControlModelPage类,包含界面的布局信息属性以及一个列表ListGroup,是中间节点ControlModelGroup类的有序集合。ControlModelGroup类包含组控件信息以及一个列表ListControler,是叶节点ControlModel类的有序集合。ControlModel类对应一个具体的控件,包含此控件的所有静态属性和事件信息;样式模型树提供接口getControlModelPage(),根据这个接口得到此模型树的根节点ControlModelPage类。
[0059] 步骤四:界面生成引擎3得到样式模型树401的根节点,根据根节点属性设置界面布局,接着以深度优先方式遍历此样式模型树401;此样式模型以树结构形态存储于内存中,起到数据缓存的作用,之后的操作完全在内存中进行,这种方式能够大大减少界面生成过程中界面生成引擎3与样式描述文档101的IO交互次数,提高界面生成效率。 [0060] 本实施例中,ControlModelPage类中布局属性layout值为“grid”,表示采用SWT提供的GridLayout来设置界面上控件的布局。
[0061] 步骤五:界面生成引擎3遍历此样式模型树401,如果遍历的当前节点为叶节点,调用SWT控件集302中对应控件类生成界面控件,设置界面控件的静态属性,并依据在样式描述文档101中的事件类型在此控件的事件监听器中嵌入事件体;
[0062] 若当前控件对应的事件含有操作较少,调用简单,则事件处理采用脚本方式执行。以本实施例中名为combo_1的界面控件生成过程说明一个界面控件的生成流程:首先根据其ctrType属性为“combo”,选取SWT控件集中相应org.eclipse.swt.widgets.Combo类来模拟生成此控件,具体执行代码org.eclipse.swt.widgets.Combo cb=newCombo(group,SWT.BORDER),构造了一个下拉框控件。接下来为此下拉框设加入数据,由于其dsType属性为″1″,则读取其dataSource属性值“放电:1;充电:0”,并循环执行 combo.add(key),combo.setData(key,value)将数据填入。接下来为此下拉框的监听器添加事件执行代码,由于其eventType属性为″1″,因此采用脚本方式,eventMethod属性为″script2.txt″,即执行脚本存放于script2.txt文件中,接着调用BSH脚本解析器提供的Interpreter类的source(String)接口执行,具体代码为newIntepreter().source(″script2.txt″),将其放入org.eclipse.swt.widgets.Combo类的实例cb的监听器中。当界面生成完毕后,用户操作激发本下拉框控件事件体中脚本文件script2.txt的执行。
[0063] 若当前控件对应的事件含有多个操作,且其中又包含嵌套调用,则事件处理采用反射方式执行。以本实施例中名为button_1的界面控件生成过程说明一个界面控件的生成流程:首先根据其ctrType属性为“button”,选取SWT控件集中相应org.eclipse.swt.widgets.Button类来模拟生成此控件,具体执行代码org.eclipse.swt.widgets.Button bt=newButton(group,SWT.NONE),构造了一个按钮控件。接下来为此按钮加入数据,由于其dsType属性为″0″,则读取其dataSource属性值“选择时间参数”,调用bt.setText(dataSource)方法将数据填入。接下来为此按钮的监听器添加事件执行代码,由于其eventType属性为″2″,因此采用反射方式,eventMethod属性为″its.prepare.atomedit.properties.control.ParamDialog″,那么接着利用Java反射机制的类库java.lang.reflect包得到反射类实例,接着将调用其执行方法代码放入org.eclipse.swt.widgets.Button类的实例bt的监听器中。当界面生成完毕后,用户操作激发本按钮控件事件体中反射类its.prepare.atomedit.properties.control.ParamDialog实例的执行方法createSubDialog(),此方法的执行会打开一个时间参数选择子窗口。 [0064] 若当前节点为中间节点,则继续遍历;直至样式模型树401的所有节点遍历完毕。界面生成完毕,本方法结束,最终界面301呈现。
[0065] 图7为最终效果图。如图7所示,界面的上部为引用已有模板生成的控件组,调用模版getInstComp.xml生成;中间部分是依据样式描述文档101生成的控件组,其中的下拉框采用脚本方式生成,文本为“选择时间参数”的按钮采用Java反射机制的类库java.lang.reflect包生成;下部是引用已有模板生成的控件组,调用模版getResultComp.xml生成。两个模板文件的使用,使得该界面的样式描述文档101的长度缩短了将近2/3,在增加已有工作的复用性同时,也减少了界面开发人员的工作量。
[0066] 在本实施例中,采用样式模型缓存样式描述文件101,减少了界面生成引擎3读取文件的次数,提高界面生成引擎3的执行效率;分析特定应用背景下的界面的特点,预编写反映通用界面需求的模板文件,通过引用这些模板文件,提高已有工作的可复用性,减少二次开发阶段的工作量。
[0067] 综上所述,本发明是界面请求众多的情况下,生成相应界面的一种有效方案,通过本发明,简化了用户界面的开发量和开发难度,可以应用到管理信息系统(MIS)等具有类似界面需求的应用中去。