首页 / 国际专利分类库 / 纺织;造纸 / 织造 / 机织织物;织造方法;织机 / 布边 / 用于创建和提供多层联网服务的方法和系统

用于创建和提供多层联网服务的方法和系统

申请号 CN200480041461.8 申请日 2004-12-17 公开(公告)号 CN1914594A 公开(公告)日 2007-02-14
申请人 爱默吉斯公司; 发明人 伦尼·霍恩; 肯·施奈德;
摘要 一种用于与 用户界面 (例如PC或PDA上的浏览器)相互作用的多层应用程序。应用程序包括表示层(例如,具有JSP/Servlet引擎的网络 服务器 )和业务逻辑层(例如,应用程序服务器),以在用户界面上处理用于随后表示的数据。引导模 块 具有多个连接的方向,包括:功能方向,用于引导相应的功能组件,以使用业务逻辑层执行 数据处理 功能并且提供数据处理输出;以及表示方向,用于引导相应的表示组件,以当数据处理输出可应用时将其与表示模板相结合来生成用于用户界面的表示元素。功能组件和表示组件彼此独立并且分离,功能组件的连接产生数据且表示组件输出数据。表示组件是表示元素普通种类的抽象表现,每个 指定 的表示元素具有储存在不同表示模板中的布局和格式(例如,置标语言),并且可以在表示层的中在处理时间内确定用于表示组件的对于特定表示模板的引用。
权利要求

1.一种用于托管在网络上与用户界面相互作用的计算机可执行 多层应用程序的方法,所述应用程序包括应用程序表示层,所 述方法包括以下步骤:
选择第一表示模板,所述第一模板包括用于定义相应的 第一表示元素的第一表示指令;
选择用于处理所述第一表示指令的所述应用程序表示层 的第一表示组件;以及
将所述第一表示组件连接到所述第一模板,其中,在执 行用于随后传递到所述用户界面的所述多层应用程序时,所述 第一组件处理所述第一表示指令并生成所述第一表示元素。
2.根据权利要求1所述的方法,还包括附加步骤:
选择第二表示模板,所述第二模板包括用于定义相应的 第二表示元素的第二表示指令;
选择用于处理所述第二表示指令的所述第一表示组件;
以及
将所述第一组件连接到所述第二模板;其中,在执行用 于随后传递到所述用户界面的所述多层应用程序时,所述第一 组件处理所述第二表示指令并生成所述第二表示元素。
3.根据权利要求1所述的方法,其中,所述多层应用程序还包括 应用程序逻辑层。
4.根据权利要求1所述的方法,其中,所述方法包括以下附加步 骤:
选择输入数据;
选择用于处理所述输入数据的所述应用程序逻辑层的第 一功能组件;以及
将所述输入数据连接到所述第一功能组件,其中,在执 行所述多层应用程序时,所述第一功能组件处理所述输入数据 并生成输出数据。
5.根据权利要求4所述的方法,其中,所述第一模板还包括用于 进一步将所述相应的第一表示元素定义为包括所述输出数据 的输出数据表示指令。
6.根据权利要求5所述的方法,包括以下附加步骤:
引导所述第一表示组件,以处理所述输出数据表示指令, 其中,在执行所述多层应用程序时,所述第一表示组件处理所 述输出数据表示指令并生成结合所述输出数据的所述第一表 示元素。
7.根据权利要求2所述的方法,其中,所述表示模板是计算机可 读文件。
8.根据权利要求7所述的方法,其中,所述表示指令选自包括所 述第一表示组件的布局、字体、以及格式的组。
9.根据权利要求8所述的方法,其中,将所述表示指令写入置标 语言中。
10.根据权利要求9所述的方法,其中,所述置标语言选自包括 HTML、HDML、和WML的组。
11.根据权利要求5所述的方法,其中,所述输出数据表示指令定 义控件,在所述控件中显示输出数据。
12.根据权利要求11所述的方法,其中,所述控件选自包括文本 字段、密码字段、隐含字段、文本区、表格、列表框、复选框、 单选按钮、图像、按钮、图像按钮、提交按钮、复位按钮、链 接、和取值范围的组。
13.根据权利要求1所述的方法,其中,所述第一表示组件是计算 机可执行文件。
14.根据权利要求13所述的方法,其中,所述计算机可执行文件 是Java Bean。
15.根据权利要求4所述的方法,其中,所述第一功能组件是计算 机可执行文件。
16.根据权利要求15所述的方法,其中,所述计算机可执行文件 是Java Bean。
17.根据权利要求1所述的方法,其中,所述第一表示组件通过方 向元素连接到所述第一表示模板。
18.根据权利要求17所述的方法,其中,所述方向元素指定所述 第一表示模板的位置并将所述第一表示组件引导至指定位置。
19.根据权利要求18所述的方法,其中,所述方向元素是第一表 示组件标签。
20.根据权利要求19所述的方法,其中,所述第一表示组件标签 选自包括页面标签、控制标签、属性标签、产生页面标签、清 零标签、和消息拦截标签的组。
21.根据权利要求19所述的方法,其中,所述第一表示组件标签 表示为方向模的指令,所述方向模块执行所述多层应用程 序。
22.根据权利要求21所述的方法,其中,所述方向模块是Java服 务器页。
23.根据权利要求1所述的方法,其中,所述第一功能组件通过方 向元素链接到所述输入数据。
24.根据权利要求23所述的方法,其中,所述方向元素指定所述 输入数据的位置并且将所述第一功能组件引导至指定位置。
25.根据权利要求24所述的方法,其中,所述方向元素是第一功 能组件标签。
26.根据权利要求25所述的方法,其中,所述第一功能组件标签 选自包括初始化标签、调用标签、前提标签、调试标签、错误 标签、赋值标签、条件标签的组。
27.根据权利要求26所述的方法,其中,所述第一功能组件标签 表示为方向模块的指令,所述方向模块执行所述多层应用程 序。
28.根据权利要求21所述的方法,其中,所述方向模块是Java服 务器页。
29.根据权利要求1所述的方法还包括以下步骤:在用户界面上将 显示项表示成多个显示区域,至少两部分与表示模板的不同的 一个部分关联。
30.根据权利要求29所述的方法,其中,所述表示模板是可重复 使用的,使得所述模板之一用于生成所述部分中的至少两个。
31.一种用于托管在网络上与用户界面相互作用的计算机可执行 多层应用程序的系统,所述应用程序包括应用程序表示层,所 述系统包括:
第一表示模板,所述第一模板包括用于定义相应的第一 表示元素的第一表示指令;
所述应用程序表示层的第一表示组件,用于处理所述第 一表示指令;以及
第一方向元素,用于将所述第一表示组件连接到所述第 一模板,其中,在执行用于随后传递到所述用户界面的所述多 层应用程序时,所述第一组件处理所述第一表示指令并生成所 述第一表示元素。
32.根据权利要求31所述的系统,还包括:
第二表示模板,所述第二模板包括用于定义相应的第二 表示元素的第二表示指令;以及
第二方向元素,用于将所述第一组件连接到所述第二模 板,其中,在执行用于随后传递到所述用户界面的所述多层应 用程序时,所述第一组件处理所述第二表示指令并生成所述第 二表示元素。
33.根据权利要求31所述的系统,其中,所述多层应用程序还包 括应用程序逻辑层。
34.根据权利要求31所述的系统,还包括:
用于处理输入数据的所述应用程序逻辑层的第一功能组 件;以及
所述第一方向元素进一步将所述输入数据连接到所述第 一功能组件,其中,在执行所述多层应用程序时,所述第一功 能组件处理所述输入数据并生成输出数据。
35.根据权利要求34所述的系统,其中,所述第一模板还包括用 于进一步将所述相应的第一表示元素定义为包括所述输出数 据的输出数据表示指令。
36.根据权利要求35所述的系统,其中,在执行所述多层应用程 序期间,所述第一表示组件处理所述输出数据表示指令并生成 结合所述输出数据的所述第一表示元素。
37.根据权利要求32所述的系统,其中,所述表示模板是计算机 可读文件。
38.根据权利要求37所述的系统,其中,所述表示指令选自包括 所述第一表示元素的布局、字体、以及格式的组。
39.根据权利要求38所述的系统,其中,将所述表示指令写入置 标语言中。
40.根据权利要求39所述的系统,其中,所述置标语言选自包括 HTML、HDML、和WML的组。
41.根据权利要求35所述的系统,其中,所述输出数据表示指令 定义控件,在所述控件中显示所述输出数据。
42.根据权利要求41所述的系统,其中,所述控件选自包括文本 字段、密码字段、隐含字段、文本区、表格、列表框、复选框、 单选按钮、图像、按钮、图像按钮、提交按钮、复位按钮、链 接、和取值范围的组。
43.根据权利要求41所述的系统,其中,所述第一表示组件是计 算机可执行文件。
44.根据权利要求43所述的系统,其中,所述计算机可执行文件 是Java Bean。
45.根据权利要求34所述的系统,其中,所述第一功能组件是计 算机可执行文件。
46.根据权利要求45所述的系统,其中,所述计算机可执行文件 是Java Bean。
47.根据权利要求31所述的系统,其中所述第一表示组件通过方 向元素连接到所述第一表示模板。
48.根据权利要求47所述的系统,其中,所述方向元素指定所述 第一表示模板的位置并将所述第一表示组件引导至指定位置。
49.根据权利要求48所述的系统,其中,所述方向元素是第一表 示组件标签。
50.根据权利要求49所述的系统,其中,所述第一表示组件标签 选自包括页面标签、控制标签、属性标签、产生页面标签、清 零标签、和消息拦截标签的组。
51.根据权利要求49所述的系统,其中,所述第一表示元素标签 表示为方向模块的指令,所述方向模块执行所述多层应用程 序。
52.根据权利要求51所述的系统,其中,所述方向模块是Java服 务器页。
53.根据权利要求31所述的系统,其中,所述第一功能组件通过 方向元素连接到所述输入数据。
54.根据权利要求53所述的系统,其中,所述方向元素指定所述 输入数据的位置并将所述第一功能组件引导至所述指定位置。
55.根据权利要求54所述的系统,其中,所述方向元素是第一功 能组件标签。
56.根据权利要求55所述的系统,其中,所述第一功能组件标签 选自包括初始化标签、调用标签、前提标签、调试标签、错误 标签、赋值标签、条件标签的组。
57.根据权利要求56所述的系统,其中,所述第一功能组件标签 表示为方向模块的指令,所述方向模块执行所述多层应用程 序。
58.根据权利要求51所述的系统,其中,所述方向模块是Java服 务器页。

说明书全文

技术领域

发明涉及一种用于创建和提供多层联网服务的方法和系统。

背景技术

基于客户应用程序的用于传递联网服务的互联网或者网络一 般具有两个主要组件。第一个是客户应用程序的“查看和感知(look and feel)”组件。第二个组件是客户应用程序的功能性。“查看和感 知”通常是具有准备和创建应用程序的表示元素的必要能的网络 设计者的权限。通常由创建、执行、和汇编客户应用程序的功能元 素的网络开发者来管理客户应用程序的功能性。
客户应用程序的表示和功能元素通常合并在相同的应用文件 中,这样的结果就是设计者和开发者在相同的文件上工作。使用这 种方法存在几个潜在的缺点。例如,如果客户应用程序的任意元素 (表示或功能)改变,则整个客户应用程序客户将不得不重新编译。 同样,可能还存在涉及版本控制(version control)、工作复制、和 客户应用程序可扩展性的潜在问题。
Java和Java Server Page的出现解决了一部分这些问题。与Java Beans或者企业版Java Beans结合的Java Server Page允许许多客户 应用程序的功能元素与表示元素分离,从而当将Java Server Page 的表示元素释放给网络设计者时,允许开发者创建并修改功能单元 (例如,Java Beans)。然而,这种方法仍然存在许多与传统客户应 用程序相同的缺点。如果表示或功能元素改变,则可能需要修正并 可能重新创建Java Server Page。因为Java Server Page仍然包括功 能和表示元素,因此也遗留了版本控制和工作复制的潜在问题。
本发明的目的在于提供一种多层应用程序,以至少消除或减轻 一部分上述缺点。

发明内容

客户应用程序的表示和功能元素通常合并在相同的应用文件 中,这样的结果就是设计者和开发者在相同的文件上工作。使用这 种方法存在几个潜在的缺点。例如,如果客户应用程序的任意元素 (表示或功能)改变,则整个客户应用程序客户将不得不重新编译。 同样,还存在可能涉及版本控制、工作复制、和客户应用程序可扩 展性的潜在问题。与现有客户应用程序相反,提供与用户界面(例 如,PC或PDA上的浏览器)相互作用的多层应用程序。应用程序 包括表示层(presentation tier)(例如,具有JSP/Servlet引擎的网络 服务器)以及业务逻辑层(business logic tier)(例如,应用程序服 务器),以在用户界面上处理用于后续表示的数据。引导模具有 多个互联的方向,包括:功能方向用于引导相应的功能组件,以使 用业务逻辑层执行数据处理功能并提供数据处理输出;以及表示方 向,用于引导相应的表示组件,以当数据处理输出可应用时将其结 合到表示模板(template),以生成用于用户界面的表示元素。功能 组件和表示组件彼此独立并且分离,功能组件的连接产生数据,并 且表示组件使用输出数据。表示组件是普通种类表示元素的抽象表 现,具有其布局和格式(例如,置标语言)的每个特定的表示元素 存储在不同表示模板中,并且可以在操作时间内在表示层上确定对 用于表示组件的特定表示模板的引用。
根据本发明,提供一种用于托管在网络上与用户界面相互作用 的计算机可执行多层应用程序的方法,该应用程序包括应用程序表 示层。该方法包括以下步骤:选择第一表示模板,第一模板包括用 于定义相应的第一表示元素的第一表示指令;选择用于处理第一表 示指令的应用程序表示层的第一表示组件;以及将第一表示组件连 接到第一模板,其中在执行用于随后传递到用户界面的多层应用程 序时,第一组件处理第一表示指令并生成第一表示元素。
该方法包括如下附加步骤:选择包括用于定义相应的第二表示 元素的第二表示指令的第二表示模板;选择用于处理第二表示指令 的第一表示组件;以及将第一组件连接到第二模板;其中在执行用 于随后传递到用户界面的多层应用程序时,第一组件处理第二表示 指令并生成第二表示元素。
在优选实施例中,表示模板是文件系统的计算机可读文件,并 且从包括第一表示元素的布局、字体、以及格式的组中选择表示指 令。在另一实施例中,将表示指令写入从包括HTML、HDML、和 WML的组中选择的置标语言中。
第一表示组件是计算机可执行文件。在优选实施例中,计算机 可执行文件是Java Bean。
该方法还可以包括应用程序逻辑层,并且附加步骤如下:选择 输入数据;选择用于处理输入数据的应用程序逻辑层的第一功能组 件;将输入数据连接到第一功能组件,其中在执行多层应用程序时, 第一功能组件处理输入数据并生成输出数据;引导第一表示组件, 以处理用于进一步将对应第一表示元素定义为包括输出数据的输 出数据表示指令,其中在执行多层应用程序时,第一表示组件处理 输出数据表示指令并生成结合输出数据的第一表示元素。
第一功能组件是计算机可执行文件。在优选实施例中,计算机 可执行文件是Java Bean。
本发明还提供一种用于托管在互联网上与用户界面相互作用 的计算机可执行多层应用程序的系统,应用程序包括应用程序表示 层。该系统包括:第一表示模板,第一模板包括用于定义相应的第 一表示元素的第一表示指令;应用程序表示层的第一表示组件,用 于处理第一表示指令;以及第一引方向元素,用于将第一表示组件 连接到第一模板,其中,在执行用于随后传递到用户界面的多层应 用程序时,第一组件处理第一表示指令并生成第一表示元素。
该系统还可以包括第二表示模板,第二模板包括用于定义相应 的第二表示元素的第二表示指令,以及第二方向元素,用于将第一 组件连接到第二模板,其中,在执行用于随后传递到用户界面的多 层式应用程序时,第一组件处理第二表示指令并生成第二表示元 素。
该系统还可以包括用于处理输入数据的应用程序逻辑层的第 一功能组件;以及第一方向元素,进一步将输入数据连接到第一功 能组件,其中,在执行多层应用程序时,第一功能组件处理输入数 据并生成输出数据。输出数据表示指令进一步将对应第一表示元素 定义为包括输出数据。
附图说明
通过以下参考附图的详细描述,本发明优选实施例的这些和其 他特点将变得显而易见,其中:
图1是根据本发明实施例的系统的示意图;
图2是图1的系统的扩展示意图;
图3是根据本发明实施例在处理请求的资源步骤中的示意图;
图4是根据本发明实施例在多层应用程序的每一层内的元素的 示意图;
图5是图1系统的替换实施例的示意图;
图6(a)是Java Server Page的示意图;
图6(b)是根据本发明实施例的Java Server Page的示意图;
图7是根据本发明实施例的功能组件的逻辑图;
图8(a)是根据本发明实施例的静态表示组件的示意图;
图8(b)是根据本发明实施例的动态表示组件的示意图;
图9是根据本发明实施例的处理Java Server Page的输出的示意 图;
图10是根据本发明实施例的使用Java Server Page的客户应用 程序的逻辑图;
图11是根据本发明的客户应用程序的处理步骤的逻辑图;
图12是根据本发明实施例的客户应用程序的处理步骤的输出 的示意图;
图13是根据本发明实施例示出的客户应用程序的系统和处理 输出的扩展示意图;
图14是根据本发明实施例的客户应用程序元素和对应系统的 示意图;
图15是示出根据本发明实施例的方法中步骤的流程图
图16是示出根据本发明实施例的图15中的方法进一步步骤的 流程图;
图17是示出根据本发明实施例的图15中的方法的替换的进一 步步骤的流程图;以及
图18是示出根据本发明实施例的图17中的方法的进一步步骤 的流程图。

具体实施方式

参考图1,示出系统10的示意图。系统10是本领域技术人员 熟知的计算网络。操作网络终端11的个体可以通过通信网络13访 问远程定位的资源。通信网络13可以是互联网、环球网(World Wide Web)、LAN、WAN、VPN。
网络终端11可以是本领域技术人员所知的任意网络设备,其 包括通过通信网络13与远程定位的资源进行通信的装置以及传输 请求的装置,包括:个人电脑、笔记本电脑、掌上电脑、手持设备、 和无线文本传呼蜂窝式电话等。
远程定位的资源可以是位于网络服务器15上的网页,或位于 数据库17中的数据,通过连接到网络服务器15(或与网络服务器 15进行通信)的应用程序服务器19(通过数据库服务器119)访问 该资源。
可选地,可以不需要网络服务器15,直接通过通信网络13访 问应用程序服务器19和关联的数据库17。例如,如果个人计算机 包括用于通过网络13(例如,调制解调器)进行通信的装置和用于 向资源主机发送资源请求的可执行软件,则操作个人计算机(即, 终端11)的个体可以通过因特网(即,通信网络13)访问远程定 位的资源。
远程定位的资源可以象静态HTML文档一样简单。可选地,请 求的资源可包括大量服务的一小部分,例如完成要求产生特别对给 定的用户当前对话期的几个响应的在线事项。包括在这些事项中的 数据是动态而不是静态的,即,它们响应于用户的特定请求而生成。 请求数据可以存放在数据库17中,由应用程序服务器19通过数据 库服务器119访问。用户可以简单地请求原始数据,或者可以处理 数据并将处理结果结合以响应用户的请求。存在几种可以处理请求 数据和/或将数据结合在响应中的方法。
参考图2,系统10的扩展示意图示出一种可以使用Java网络 服务器(Java Web Server)和Java服务器页(Java Server Page)(JSP) 技术处理请求的方法。网络服务器15包括Java服务器页引擎21和 小服务程序引擎23,它们一起处理请求的资源(即,JSP 25)并生 成返回到终端11的响应。
图3示意性示出请求的资源25和生成的响应,数据输出27的 扩展视图。操作终端11的用户通过通信网络13请求远程定位的资 源(Java服务器页25)。运行JSP引擎21的网络服务器15接收资 源请求并恢复请求的Java服务器页25,读取它并将JSP元素翻译 成Java代码29(.Java)。然后,使用本领域技术人员熟知的标准编 译器将Java代码译文29编译到Java小服务程序31(.class)中。 接下来,使用标准API(例如,小服务程序引擎23)执行小服务程 序31。当小服务程序运行时,它处理输入数据33并生成数据输出 27,即,它处理请求并生成响应。然后,通过网络13将输出27引 导至终端11。
参考图4和图13,根据本发明的优选实施例示出用于托管在网 络上与用户界面11上与关联的元素相互作用的计算机可执行多层 应用程序191的系统,该应用程序包括应用程序表示层171和应用 程序逻辑层181。该系统包括:第一表示模板65,第一模板包括用 于定义对应第一表示元素或输出79的第一表示指令;应用程序表 示层171的第一表示组件161,用于处理第一表示指令;以及第一 方向元素61,用于将第一表示组件161连接到第一模板65,其中, 在执行用于随后传递到用户界面11的多层应用程序时,第一组件 161处理第一表示指令并生成第一表示元素。
在优选实施例中,该系统包括:第二表示模板67,第二模板 67包括用于定义相应的第二表示元素或输出79的第二表示指令; 以及第二方向元素,用于将第一表示组件161连接到第二模板67, 其中,在执行用于随后传递到用户界面11的多层应用程序时,第 一组件161处理第二表示指令并生成第二表示元素或输出79。
在又一实施例中,该系统包括:应用程序逻辑层181的第一功 能组件59,用于处理输入数据33;以及第一方向元素,进一步将 输入数据33连接到第一功能组件59,其中,在执行多层应用程序 时,第一功能组件处理输入数据33并生成输出数据27。输出数据 表示指令进一步将相应的第一表示元素或输出定义为包括输出数 据27。
参考图4和图15,根据本发明的优选实施例示出用于托管在互 联网上与用户界面相互作用的计算机可执行多层应用程序191的方 法的流程图,其中,应用程序191包括应用程序表示层171。该方 法包括以下步骤:选择第一表示模板65,第一模板65包括用于定 义相应的第一表示元素的第一表示指令(步骤100);选择用于处理 第一表示指令的应用程序表示层171的第一表示组件161(步骤 200);以及将第一表示组件连接到第一模板65(步骤300),其中, 在执行用于随后传递到用户界面的多层应用程序时,第一组件161 处理第一表示指令并生成第一表示元素或输出79。
参考图4和图16,示出图15的方法附加步骤的流程图。步骤 还包括:选择第二表示模版67,第二表示模版包括用于定义相应的 第二表示元素或输出79的第二表示指令(步骤101);选择用于处 理第二表示指令的第一表示组件161(步骤201);以及将第一组件 161连接到第二模板67(步骤301),其中,在执行用于随后传递到 用户界面的多层应用程序191时,第一组件161处理第二表示指令 并生成第二表示元素或输出79。
在优选实施例中,表示模板65、67是文件系统的计算机可读 文件,以及表示指令是例如但不限于第一表示元素的布局、字体、 以及格式。在另一实施例中,表示指令写入从包括例如但不限于 HTML、HDML、和WML的组中选择的置标语言中。
第一表示组件161是计算机可执行文件。在优选实施例中,计 算机可执行文件是Java Bean。
第一表示组件161通过方向元素57连接到第一表示模板65。 引导组元素57指定第一表示模板65的位置并将第一表示组件161 引导至指定位置。在优选实施例中,方向元素57是例如但不限于 页面标签、控制标签、属性标签、制作页面标签、清零标签、和消 息拦截标签的第一表示组件标签57。
将第一表示组件标签57作为执行多层应用程序的方向模块的 指令来表示。在优选实施例中,方向模块是Java服务器页49。
参考图4和图17,示出图15的方法附加步骤的流程图,其中, 多层应用程序191还包括应用程序逻辑层181。步骤还包括:选择 输入数据33(步骤102);选择用于处理输入数据33的应用程序逻 辑层181的第一功能组件59(步骤202);将输入数据33连接到第 一功能组件59(步骤302),其中,在执行多层应用程序191时, 第一功能组件59处理输入数据33并生成输出数据27。
参考图4和图18,示出图17的方法附加步骤的流程图,其中, 第一模板还包括用于进一步将相应的第一表示元素定义为包括输 出数据27的输出数据表示指令。该方法包括以下附加步骤:引导 第一表示组件161,以处理输出数据表示指令(步骤403),其中, 在执行多层应用程序191时,第一表示组件161处理输出数据表示 指令并生成结合了输出数据33的第一表示元素或输出79。
在优选实施例中,输出数据表示指令定义控件,其中,显示例 如但不限于文本字段、密码字段、隐含字段、文本区、表格、列表 框、复选框、单选按钮、图像、按钮、图像按钮、提交按钮、复位 按钮、链路、和取值范围的输出数据。
第一功能组件59是计算机可执行文件。在优选实施例中,计 算机可执行文件是Java Bean。
第一功能组件59通过方向元素55连接到输入数据33。方向元 素55指出输入数据33的位置并将第一功能组件引导至指定位置。 在优选实施例中,方向元素55是例如但不限于初始化标签、调用 标签、前提标签、调试标签、错误标签、赋值标签、条件标签的第 一功能组件标签55。
在优选实施例中,将第一功能组件标签55表示为方向模块的 指令,放下模块执行多层应用程序。方向模块是Java服务器页49。
参考图5,示意性地示出系统100的另一替换实施例作为应用 程序服务器小服务程序系统200。JSP引擎21位于应用程序服务器 19上。在Java服务器页25的翻译、编译、和执行中,小服务程序 引擎23与JSP引擎21合作。在系统200中的远程定位的资源可以 包括位于本地数据库17上的数据,其可以由应用程序服务器19通 过数据库服务器119直接访问并由小服务程序31处理。在这种情 况下的输出通过其他机构(例如,电子邮件)返回给用户。
参考图6(a),示出本领域技术人员熟知的Java服务器页JSP39 的示意图。JSP39是包括静态模板数据(可以由基于例如HTML、 WML、和XML格式的任意文本的来表示)和JSP元素(通过JSP 引擎21解释)的文本文档。
通过使用置标(ML)语句43写入JSP39的这些部分以创建定 义处理的输出的查看和感知的静态内容。例如,如果选择HTML作 为ML,则使用HTML语句和语法编写JSP的模板部分。
通过访问Java编程语言对象属性创建动态内容。JSP39的动态 元素通常包括:JSP指令41,将信息传递到JSP引擎21;JSP标签 45,可以以用于例如初始化服务器上的Java Bean的标准标签或者 自定义标签来实现;以及脚本小程序47,其是执行标签不支持的功 能的Java代码的小脚本。
JSP指令41可以包括page_directives(传达页面的特定信息, 例如,缓冲器和线程信息或错误操作)、language_directives(指定 JSP脚本语言)、include_directives(可以用于包括页面中的外部文 档)、以及taglib_directives(指出页面可以调用的自定义标签库)。
JSP标签45负责执行大部分的JSP处理。这包括许多标准标签 (例如,useBean,setProperty,和getProperty)。也可以为了特定目 的来设计和执行自定义标签。
参考图6(b),示出根据本发明优选实施例的JSP49。在本发 明的优选实施例中,JSP49不包括任意置标语言(ML)语句43, 也不包括Java脚本小程序47。分别将全部操作或者JSP49的功能 和表示元素保存为离散的功能组件和表示组件。通过各个自定义功 能组件标签扩展55和表示组件标签扩展57访问组件59和61,分 别使用功能组件taglib_directive51和表示组件taglib_directive53依 次指定自定义功能组件标签扩展55和表示组件标签扩展57。
因此,在小服务程序客户应用程序的结构中,根据本发明汇编 的Java服务器页49只包括JSP指令和自定义标签扩展55和57。
JSP指令
JSP49指令为以下格式:<%@directiveName attribute=“value” %>
其中:
directiveName是指定指令名称
attribute是该指定指令的属性
一个指令可以具有0个或多个属性。
Value是用于指定属性的特定值
一个属性可以恰好具有一个值。
JSP49页面指令
在优选的实施例中,所有JSP处理页49均以下述页面指令开 始:
<%@page session=“true”buffer=“buffer size kb”
autoFlush=“true”
1 isThreadSafe=“true”errorPage=“…/errorPage.jsp”%>
其中:
…/errorPage.jsp是如果处于未获取的运行时间异常,则将调用 另一JSP页的URL
如果是错误JSP页,则随后的属性将包括在页面指令 isErrorPage=“true”中。
JSP49 taglib指令
taglib指令指定自定义标签扩展。下列标签库指令是在所有JSP 处理页49中(权限在page指令之后)指定的:
<%@taglib uri=“/servlet/FCTagsClient.jar”prefix=“FC”%>
<%@taglib uri=“/servlet/PCTagsClient.jar”prefix=“PC”%>
JSP49 include指令
包括指令可以用于插入、内嵌其他JSP处理页49的内容:
<%@include file=“…/otherPage.jsp”%>
其中:
…/otherPage.jsp是将包括的另一JSP页的路径
功能组件(FC)
参考图7,示出功能组件59的逻辑图。
功能组件59是业务功能性清晰、独立的部分。每个功能组件 59接收一组前提数据33,使用接收的数据33执行处理功能,并且 返回一组结果数据27。在优选的实施例中,每个功能组件59作为 基于一般基类(generic base class)的Java类存在。当客户应用程 序请求功能组件59时,使用基于功能组件59的逻辑名称的Java 反射简单地初始化。功能组件59符合Java Bean的规范。
公共抽象类FC(Public Abstract Class FC)是用于所有功能组 件59的一般定义。所有指定功能组件59类均扩展这一基类。该抽 象类提供通过所有功能组件59类继承的一组内置功能性,并且定 义必须在功能组件59类自身中明确执行的一组功能性。
公共类{ApplicationCategory}{Function}:
通过扩展功能组件59类的指定类,进一步定义任意给定的功 能组件59。
在优选实施例中,用于特定功能组件59类的命名规范是 {ApplicationCategory}{Function},其中:
●{ApplicationCategory}是指出功能组件59所属应用程序范畴 (例如,用于Net*Order应用程序类型的Order、用于Net*Track应 用程序类型的Track、或用于General应用程序类型的General)的 简易格式。
●{Function}是表示该特定功能组件59功能的简短但描述的 短语(例如,用于实际上执行类型的搜索并返回一系列结果的功能 组件59的PerformProductSearch)。
功能组件实例
利用功能组件59实例名初始化功能组件59,使得可以唯一地 命名多个实例。在优选实施例中,功能组件59实例名是:
{ApplicationCategory}{Function}_{InstanceDescription}
其中:
{InstanceDescription}是用于功能组件59的该特定实例的简短 描述引用,
例如,OrderPerformProductSearch_OrderEntry
公共方法setInstanceDescription()
该方法用于设置对功能组件59的实例描述。通常在初始化功 能组件59之后立即调用该方法。
公共方法getInstanceDescription()
该方法返回对功能组件59的实例描述。
公共方法getInstanceName()
该方法返回对功能组件59的实例名称。
前提数据33和返回的结果数据27
在优选实施例中,将全部的前提数据33和返回的结果数据27 储存为实例变量。实例变量的名称是前提数据元素本身的名称。此 外,这是用于每个使用相同命名规范的这些实例变量中的设置和得 到方法。允许通过使用Java反射外部地引用前提数据33。例如, 如果功能组件59具有称为userID的前提数据组件33,则存在使用 名为setUserID()的公共方法外部地设置名为setUserID的实例变 量。在同样是返回的结果数据27元素的情况下,则使用公共方法 setUserID()返回数据27。在返回的结果数据元素的情况下,存在 公共得到方法。
保护方法validate()
在实际执行功能组件59的任意处理逻辑之前,在execut()方 法中调用validate()方法。如果存在任意遗漏或不正确地设置前 提数据33,则返回FC_EXCEPTION_PrerequisiteData FCException 异常。
公共方法execute()
execute()方法提供功能组件59的内部处理逻辑。在执行任 意指定处理之前,证实所有的前提数据33。当产生返回结果数据 27时,它被存储到各个实例变量中。如果在执行处理逻辑的时候产 生错误,则返回适当的FCException异常。
公共类FCException
该类表示在前提数据33的证实期间或者功能组件59的处理逻 辑执行期间产生的错误。
公共FC_EXCEPTION_PrequisiteData
该异常表示前提数据33不符合由功能组件59定义(definition) 定义的要求。通常由对功能组件59的特定调用中的错误产生这种 异常。
公共FC_EXCEPTION_FCInternal
该异常表示在功能组件59的内部处理逻辑期间的意外错误。 通常由在功能组件59逻辑自身内的错误产生这种异常。
公共FC_EXCEPTION_ServerInternal
该异常表示在涉及调用服务器的功能组件59的内部处理逻辑 期间的意外错误。通常由在功能组件59逻辑自身内或者服务器逻 辑内的错误产生这种异常。
公共FC_EXCEPTION_Exception
该异常表示尝试返回无效功能组件异常。FCException自身可 以只返回该异常。由在功能组件59逻辑自身内的错误产生这种异 常。
公开FC_EXCEPTION_Assertion
此异常表示断言失败。
其他异常
功能组件59自身可以通过在构造功能组件异常时指定其自身 异常标识码来定义其自身的功能组件异常。由功能组件59定义异 常的具体含义。
公共方法getExceptionID()
该方法返回异常的标识符。
公共方法getFailureReason()
该方法返回故障原因。
公共方法toString()
该方法返回异常的可打印版本。
功能组件(FC)标签扩展:
使用一组功能组件标签扩展55调用功能组件59。
Function component:init标签
该标签初始化用于功能组件59处理的页面。在优选实施例中, 该标签是用于功能组件自定义标签55的每一页面上的第一功能组 件自定义标签。该标签具有如下格式:
[]
其中:
classpath是初始化功能组件59时用于搜索的类途径。
scope是用于在JSP49上初始化的功能组件59的存储的缺省作 用域。该作用域可以是下列值的任意一个:应用程序、对话、或请 求。如果没有指定该作用域,则缺省作用域为session。
例如,session
classpath属性和scope属性是可选的。
function Component:call标签
该标签55定义将调用特定功能组件59。该标签具有如下格式:

dontResetAllData=“yes”scope=“scope”
conditionalExecution=“true”>
functionComponent-body

其中:
functionComponentInstanceName是用于调用的功能组件59实 例。如果在当前执行的功能中已经调用该功能组件59实例,则重 用该功能组件59的实例。此外,创建该功能组件59实例。
例如,OrderGet_OrderEntry
debugLevel是用于该指定功能组件59调用的调试等级,指定 为高、中、或低。
dontResetAllData表示将不调用功能组件59的resetAllData() 方法。通常总是在设置用于该功能组件调用的任意前提数据33之 前将调用功能组件59的resetAllData()方法。resetAllData()方 法可以与简单地使用全部前提数据33上的空属性产生不同的效果。 对于数值,使用空属性将这些值设置成0,然而resetAllData()方 法实际上可以使得这些值被设置为一些除0之外的缺省值。功能组 件59定义resetAllData()方法的特定状态。当功能组件59具有多 个可选的前提数据33元素,并且功能组件59在对话中使用一次以 上时,期望在随后的调用中重设全部前提数据33。然而,可以是不 期望状态的情况。可以使用dontResetAllData属性覆盖这些状态。
scope是用于存储该功能组件59的作用域(覆盖用于在 functionComponent:init标签中定义的页面的设置)。作用域可以为下 列值中的任意一个:功能、对话、或请求。如果没有指定,则通过 functionComponent:init标签定义作用域。
例如,session
conditionalExecution=“true”该属性表示根据当前具有true值的 封闭functionComponent:if标签有条件地执行标签55。
在请求时,该标签55具有包括functionComponent:prerequisite 和functionComponent:error标签的主体。只有name属性是强制的。
通过dataReference规范可访问返回的结果数据27。
functionComponent:prerequisite标签
该标签55定义用于功能组件59的一个前提数据元素33。该标 签55必须定义在functionComponent:call标签的主体之内。该标签 55具有如下格式:
value=“literalValue”source=“dataReference”optsource=“dataRefer ence”empty=“booleanValue”/>
其中:
prerequisiteDataReference是功能组件59的前提数据元素33的 简名或者是对功能组件的前提数据元素的数据元素的引用。在优选 实施例中,前提数据引用以对功能组件59的前提数据元素33的引 用开始。
如果标签只是前提数据元素33本身,则引用只是数据元素的 名称(例如,ordered)。
如果前提数据元素33是结构体,则引用是数据元素结构的名 称、点(‘.’)、和结构的元素名称。(如果元素是结构体本身,则它 也可以被进一步定义。)(例如,userAttributes.firstName)。
literalValue是硬编码的文字值。
dataReference是对动态数据的引用,对动态数据的引用与定义 用于控制标签的数据引用值使用相同的规范。
booleanValue是true或false。
在优选实施例中,所有属性是强制的,除非指定value、source、 optSource、或empty中唯一的一个。如果指定optSource,则 dataReference可以是不存在的数据引用。
如果指定empty=“true”,则将适当的值传给设置方法。对于 string属性,则传输空串(即,“”)。对于numeric属性,则传输零 (即,“0”)。对于object属性,则传输空值(即,null)。
funetionComponent:debug标签
该标签55定义各种有助于调试JSP页的调试信息。在优选实 施例中,标签55具有如下格式:
value=“literalValue”source=“dataReference”/>
其中:
debugLevel是用于全部功能组件59的缺省调试等级,指定为 高、中、或低。
debugFile是到将用于调试输出的文件的路径。(在优选实施例 中,第一次遇到调试文件规范,打开该文件用于追加。忽略所有后 序的调试文件事件。如果没有指定调试文件,则调试输出转到 System.out流)
literalValue是硬编码的文字值。
dataReference是对动态数据的引用,对动态数据的引用与定义 对控制权标签的数据引用值使用相同的规范。
所有的属性都是可选的,然而,可以只能指定一个value或 source。优先顺序由随后的值规定。
functionComponent:error标签
该标签定义用于对功能组件59的一种类型错误的处理。该标 签必须定义在functionComponent:call标签主体内。该标签具有以下 格式:

其中:
errorDescriptor是识别特定功能组件异常的串,例如, PasswordMismatch。功能组件59本身定义指定功能组件异常的含 义。“*”的特定值表示任意异常(即,缺省异常处理程序)。
…/errorPage.jsp是如果发生特定的运行时间错误,则将调用的 另一个JSP页49的URL。在错误页面内的脚本变量 functionComponentException中出现异常。如果将错误页面指定为特 定值“ignore”,则忽略异常。错误页面可以是特定值或数据引用。 对动态数据的引用使用与定义对控制标签的数据引用值相同的规 范。
在优选实施例中,所有属性是强制的。
functionComponent:getValue标签
该标签用于设置具有功能组件的返回结果数据元素值的脚本 变量。该标签具有以下格式:

其中:
DataReference是对动态数据的引用。对动态数据的引用与定义 对控制标签的数据引用值使用相同的规范。
在优选实施例中,所有属性是强制的,除了可指定source和 optSource中唯一的一个。如果指定optSource,则dataReference可 以是不存在的数据引用。
将脚本变量resultValue设置成具有指定返回结果数据元素的 值。
functionComponent:if标签
该标签用于条件地执行其他标签调用并条件地生成ML输出。 该标签具有以下格式:

   conditional-functionComponent-body

该标签作为IF-THEN块。如果在块的末端functionComponent:if 块的值是ture,则只包括由在该块内的标签中生成的ML输出。在 块的开始,将块的值初始化为false。通过调用下述Java方法设置 块的值:
functionComponentIfTag.setIfValue
通常从通过在functionComponent:if标签的块内的 functionComponent:call标签调用功能组件的execute()方法中调用 setIfValue()方法。可以在相同的块内多次调用setIfValue()方法。 然而,最后一次调用确定用于块的最终设置,用于判断在块内产生 的ML输出是否应该包括在生成的输出页面内。
此外,可以条件地执行functionComponent:if块内的各种标签。 如果标签包括属性conditionalExecute=“true”,则该标签只在 functionComponent:if块的当前值为true的时候执行。随后的标签 55支持conditionalExecute属性functionComponent:call、 presentation:control、presentation:producePage。在请求的时候可以将 conditionalExecute属性添加到其他标签中。可以使用 conditionalExecute属性构建用于functionComponent:if块的逻辑 “AND”条件。假设称为“SelfValueFunctionComponent”的功能组 件59获得前提数据33并确定是否调用 functionComponentIfTag.setIfValue()方法。可以在 functionComponent:if块的开始使用functionComponent:call标签调 用该功能组件两次。在第二个functionComponent:call上,其包括 conditionalExecute属性。这样有效地使得functionComponent:if块的 值成为第一SelfValueFunctionComponent调用的值与第二 SelfValueFunctionComponent调用的值取“AND”。
表示模板(PT)
参考图8(a)、图8(b)、和图9,根据本发明优选实施例示意 性地示出显示模板(PT)61。一组PT61文件定义客户应用程序的 “查看和感知”,每个PT61包括定义表示元素的模板、或用于客户 应用程序的输出页面79、或一部分输出页面79的一系列ML语句。 用于客户应用程序的PT61文件组具有特定的语言(例如,法语、 英语)或格式(例如,THML、HDML)。
在优选实施例中,PT61文件采用两种格式中的一种。参考图 8(a),示出第一或者静态PT65。静态PT65只包括定义输出页面 79或其一部分的表示元素的ML语句。在处理JSP49时,静态PT65 的ML语句用于定义输出页面79的静态部分,例如页眉或页脚, 即,对客户应用程序的所有输出页面公用的输出页面79的这些部 分。
参考图7和图8(b),示出第二或动态PT67。动态PT67包括 定义输出页面79或输出页面79一部分的表示元素的ML语句。它 还包括至少一个控件63,其提供到由FC59生成的数据输出27的 连接。当处理JSP49的时候,动态PT67的ML语句定义合并了 FC59的数据输出27的输出。例如,输出页面79或其一部分可以 在表格中显示订单的定购细节(例如,定购项目的列表)。FC59的 数据输出可以是定购项目的列表,其显示在具有由PT67定义的表 示格式的HTML表格(即,控件63)中。
在优选实施例中,明确的分级文件结构用于表示模板文件的使 用。该级包括下列级别,顺序为:
应用程序根段—为用于该指定应用程序级的根段。
格式—该级别通过格式(例如,html,hdml部)组织文件。
语言—该级别通过语言地区(例如,en_US、en_CA、fr_CA 部)组织文件。
应用程序指定级别—这(这些)级别可以定义为对具体应用程 序的请求。
如果指定单个的表示模板文件61,则其位于应用程序指定级内 而不是位于语言级内。
在优选实施例中,将“查看和感知”的共同元素分割成单独的 表示模板文件61。例如,如果应用程序的所有页面均具有公共页眉 和公共页脚,则这些部分的每一个将分别从它们本身的文件中抽取 出来,使得他们可以由引用“包括”而不是具有在应用程序的所有 页面中复制的它们的内容。因此,认识到可以重新使用信使模板文 件61(courier template file)以及结合的FC标签59和PC标签57, 以生成应用程序页面。例如,模板61之一可以表示多行表格中的 一行,该表格具有引导用于行模板61的每个调用的插入的表格内 容的适当的PC标签57和FC标签59。
使用这个文件组织模式,可以确定到ML PT61文件的物理路 径,该文件给定包括任意应用程序指定级的适当根段路径、文件格 式、语言、和文件名。
例如,应用程序可以具有定义成如下部分:common、orderEntry、 和orderHistory的一个应用程序指定级。应用程序自身具有与进行 插入和处理命令有关的一系列页面49,以及具有与进行选择和察看 命令历史有关的另一系列页面49。ML表示模板文件61组可以以 如下方法组织:
.../orderApplication/html/en_CA/common/header.html
.../orderApplication/html/en_CA/common/footer.html
.../orderApplication/html/en_CA/orderEntry/search.html
.../orderApplication/html/en_CA/orderEntry/entry.html
.../orderApplication/html/en_CA/orderEntry/submit.html
.../orderApplication/html/en_CA/orderHistory/search.html
.../orderApplication/html/en_CA/orderHistory/display.html
具有另一组文件,如下:
.../orderApplication/html/fr_CA/...
.../orderApplication/hdml/en_CA/...
.../orderApplication/hdml/fr_CA/...
可以使用适当的WYSIWYG编辑器(例如,由San Francisco, CA的Macromedia开发的用于HTML文件的HomeSite)设计各个 ML表示模板文件61。可以使用本领域技术人员熟知的任意其他适 合的编辑器。ML表示模板文件61自身包括“纯”置标语言(例如, HTML)。
ML PT文件61表示可以包括动态内容(例如,ML PT67)的 页面。任意动态内容必须定位在位于页面上的控件63内。每种置 标语言都具有其自身的一组控件。每个控件63具有定义将插入控 件63中的动态内容顺序的标示符(即,在HTML中,id=“idvalue”) 关键字。在ML文件中,控件可以具有空数据。该空数据在ML文 件的设计阶段被用于显示。然而,当在控件中插入动态数据时,自 动去除该空数据。在基于ML表示模板动态文件67的HTML的情 况下,只要每个控件具有用作标示符关键字(即,id=“idvalue”) 的唯一值,则下列控件的任意一个将被认为是动态数据插入:文本 字段、密码字段、隐含字段、文本区、表格、列表框、复选框、单 选按钮、图像、按钮、图像按钮、提交按钮、复位按钮、链路、和 取值范围。在替换实施例中,ML文件可以包括本领域技术人员熟 知的任意其他置标语言,例如,HDML或WML。
表示组件(PC):
参考图4,示意性地示出表示组件(PC)161。PC161是表示 功能性的明确、独立的部分。每个表示组件161处理相应的表示元 素。在优选实施例中,每个表示组件161作为基于一般基类的Java 类存在。当客户应用程序请求表示组件161时,基于表示组件161 的逻辑名称使用Java反射简单地初始化。表示组件161符合Java Bean的规范。
表示组件(PC)标签扩展:
表示组件文件161包括使用一组表示组件标签扩展57。表示组 件文件自定义标签扩展57提供在表示文件67中的控件63、动态数 据27、以及JSP页49中的表示组件161之间的联接。此外,这些 扩展57还提供生成后序显示页面79的能力。
presentation:page标签
该标签定义指定表示组件文件161将用于当前处理页面49中。 该标签具有如下格式:
format=“presentationFormat”language=“languageSpecification” absolute=“true”/>
其中:
presentationName是将由处理页面49中引用的该表示页面的唯 一名称。
rootPath(可选的)是文件的根路径。
fileName是包括任意应用程序指定级名称的文件名。
presentationFormat是表示文件61的格式,其必须是下述值之 一:html、hdml、或wml。
languageSpecification(可选的)是表示文件61内容的语言, 如果指定,则必须是下述值之一:en_CA、fr_CA等。在优选实施 例中,name和format属性是强制的。必须明确指定source或value 属性之一。可以直接将除了value之外的每个属性指定为值,否则 可以对动态数据引用(即,dataReference)。除非将absolute属性指 定为ture,到表示文件的路径均被认为是相关的。
presentation:control标签
该标签连接从动态表示模板文件67到控制动态数据和表示组 件161的资源的控件63。当动态表示模板文件67的特定格式支持 控件63的类型时,使用该标签。在优选实施例中,该标签具有如 下格式:
value=“literalValue”                 source=“dateReference” optSource=“dateReference”empty=“booleanValue”
id=“identifier”conditionalExecution=“true”/>
其中:
controlName是将被引用该控件的唯一名称。
controlType是控件的具体类型。如果HTML是选择的ML,则 HTML控件包括input(要求属性type,设置用于文本字段的text, 设置用于密码字段的password,设置用于隐含字段的hidden,设置 用于按钮的button,设置用于图形按钮的image,设置用于提交按 钮的submit,设置用于复位按钮的reset,设置用于复选框的 checkbox,设置用于单选按钮的radio)、textarea、table、select(列 表框)、img(图像)、(链接)或取值范围。
parentName是包括为表示页面或其他页面的该控件的双亲段 的名称。
如果控件被指定直接地包括在页面中,则值为表示名称、点 (‘.’)、和控件名称。如果控件被指定在直接地包括在页面中的其 他控件中,则值为表示名称、点(‘.’)、直接控件名称、点(‘.’)、 和控件名称。这不限于在控件内的控件嵌入。
literalValue是硬编码的文字值。
dataReference是对动态数据的引用。
由该属性引用的数据类型必须与控件类型一致。
动态数据引用可以是对用于定义该处理页面或小服务程序请 求定义的关键字-值成对数据的引用或者是对从应用程序组件返 回的结果数据的引用。
如果关键字-值成对数据的值是简单值,则该引用是简单地引 用关键字本身。
例如,orderNumber
如果关键字-值成对数据的值是结构,则该引用是关键字、点 (‘.’)、和结构的元素名称。(如果元素本身是结构,则其还可以进 一步定义)
例如,orderHeaderAttr.orderStatus
返回的结果数据引用包括功能组件59实例名称、点(‘.’)、和 返回结果数据元素名称。
例如,orderGet_orderEntry.orderID
如果返回的结果数据元素是结构,并且期望的动态数据27是 结构的元素,则通过点(‘.’)和元素名称定义返回的结果数据。(如 果元素本身是结构,则其还可以进一步定义)
例如,orderGet_orderEntry.orderHeaderAttr.orderStatus
如果以字符@开始动态数据引用,则其为隐含间接引用。在这 种情况下,一旦确定返回结果数据元素,则其自身被认为是通过应 用上述规则重新估计的动态数据引用。(如果随后认为是动态数据 引用的返回结果数据元素也以字符@开始,则其也为隐含间接引 用,并且估计处理全部重新开始。)
booleanValue是true或false。
Identifier(可选的)是在表示文件中的控件的标识符。
在动态表示文件67中的控件必须具有等同的id=“identifier”属 性。如果在presentation:control标签中没有指定标识符,则具有名 称id的标识符必须设置为presentation:attribute标签中的值 identifier。
conditionalExecution=“true”该属性表示该标签的执行是以当前 具有true值的附带applicationcomponent:if标签为条件的。
name、type、和parentPresentation属性是强制的。仅可以指定 value、source、或者optSource之中的一个。如果指定optSource, 则dataReference可以是不存在的数据引用。指定的属性提供用于 ML文件中控件的主体内容。如果未指定这些属性,则在ML文件 中没有主体内容被替代。
presentation:attribute标签
该标签指定用于特定控件63的特定标签。该标签必须在 presentation:control标签的主体内定义。该标签具有如下格式:
value=“literalValue”source=“dateReference”
optSource=“dateReference”
empty=“booleanValue”/>
其中:
attributeName是设置的属性名称。
literalValue是硬编码的文字值。
dataReference是对动态数据的引用。
booleanValue是true或false。
除了只可以指定value、source、optSource、或者empty之中的 一个,全部属性是强制的。如果指定optSounce,则dataReference 可以是不存在的数据引用。
presentation:producePage标签
该标签定义在首先将全部动态内容移到PT中之后,基于指定 的表示模板文件61将产生用于显示页面的输出。在处理文件49中 碰到该标签时(即,在执行多层应用程序期间)产生输出。如果碰 到多个producePage标签,则产生的显示页面79将包括以在处理页 面49中碰到的顺序从每个producePage标签中输出的拼接。该标签 具有以下格式:

其中:
PresentationPageName是表示文件61的名称,以生成用于预先 必须通过presentation:page标签定义的表示文件61的输出。
conditionalExecution=“true”该属性表示该标签的执行是以当前 具有true值的附带application component:if标签为条件的。
页面属性是强制的。
presentation:clear标签
该标签清除JSP49的输出缓冲器。通常用于在生成任意内容之 前清除JSP服务器在XML标签周围插入的空行。在HTML中,忽 略该数据,但是纯文本文档没有这些附加行。该标签没有属性。
presentation:interceptor标签
该标签是截取其主体的输出并将其插入到resultValue页面变量 中,以及可选地将其复制到页面输出的主体标签。该标签具有以下 格式:
duplicateOutput=“booleanValue”/>
其中:
interceptEnabled是表达式,如果为真,则可以截取。
duplicateOutput是表达式,如果为真,则将截取的输出复制到 所附页面。
interceptEnabled属性是强制的,duplicateOutput属性是可选的。
使用处理文件定义用于小服务程序客户应用程序的处理逻辑
参考图4、图6(a)、图6(b)、图7、图8(a)、图8(b)、 和图9,根据本发明优选实施例示意性地示出了小服务程序客户应 用程序中的JSP49的处理逻辑。在一组JSP49处理文件中定义用 于小服务程序客户的处理逻辑。处理文件执行两个明确的处理任 务。
首先,处理文件49提供调用执行指定处理功能性的功能组件 59的能力。指定处理功能性包括处理输入数据33和提供输出数据 27。
处理文件49还定义在动态表示模板文件67定义的控件63和 动态数据本身之间的连接69。在完成用于具体输出页面79的全部 指定处理功能性,并生成全部动态数据27之后,可以通过将动态 数据移入动态表示文件67中以及生成具有表示组件161的表示元 素来产生下一显示页面79。
在优选实施例中,使用JavaServerPage(JSP)执行处理文件49。 为了使处理文件用户界面更友好,引入两组用自定义JSP标签扩展。 功能组件(FC)自定义标签55提供调用功能组件59的能力。表示 文件自定义标签61提供动态数据和表示文件中控件63之间的连 接,还提供生成具有表示组件161的显示页面79的能力。
客户应用程序基础架构(infrastructure)97定义执行同时构成 客户应用程序71的功能框架的自定义JSP FC标签扩展55和PC标 签扩展57库的类。该类支持客户应用程序功能组件59和表示组件 161。
基础架构97提供功能组件59和指定应用程序用户之间的界 面。还提供用于小服务程序GUI、容器(applet)GUI、以及直接可 编程界面的合适的连接点。基础架构还提供一组类,其实现用于支 持客户应用程序的表示组件161的自定义JSP扩展库。
参考图10和图11,示出根据本发明优选实施例组合的客户应 用程序71的逻辑图。为了示例的目的,描述小服务程序客户应用 程序。通过从终端11上的浏览器内输入应用程序71开始JSP49的 URL的用户调用小服务程序引擎23。
小服务程序客户程序71逻辑上包括一系列Java服务器页49, 其中每一页均定义客户应用程序71的处理逻辑的一部分。每个页 面49具有一个或多个提供页面的“查看和感知”的关联的表示模 板61。每个页面49还具有一个或多个提供其处理逻辑的关联的功 能组件59和提供其表示逻辑的表示组件161。
在客户应用程序71的执行中的任意指定点处,用户操作端11 在本地浏览器窗口中浏览页面并与其相互作用。用户键入信息,然 后使得(例如,通过“推”按钮)来自页面的数据与指向客户应用 程序71下一页面49的指针一起返回网络服务器15。用户数据以一 组关键字值对73的形式返回到网络服务器15。
在这一点,处理客户应用程序71的下一页面49,将通过PC161 生成并用于生成新的浏览页面79的输出数据27退回到终端11上 的用户浏览器窗口,并且整个循环再次开始。
总的来说,小服务程序客户应用程序71的每个页面49:
·接收一组关键字值的成对数据73作为输入
·执行处理步骤77
·生成新显示页面79,用于包含所有请求的嵌入程序结构用户 操作终端11,以改变到下一页面的控制流的方向并将关键字值的成 对数据73返回到下一页面。
在替换实施例中,可以组合容器客户程序93或直接可编程界 面客户程序95。(图13)
容器客户程序93是针对在终端11上运行的客户应用程序71 的基于Java Swing的界面。在本地运行的时候,终端11上的用户 直接与应用程序互相作用。客户应用程序71经由CORBA界面97 通信通过网络13(例如,因特网)与Net*Suite服务器通信。使用 Java Swing GUI组件将响应直接写到屏幕。
直接可编程界面是使用应用程序的另一机构。直接可编程界面 客户程序95是指定的一组Java代码。直接客户程序95示出一组功 能组件59,以提供用于客户应用程序71的处理逻辑。直接客户程 序95适当地设置前提数据33,调用execute()方法,并且得到用 于每个功能组件59实例的返回数据27。
如果被请求,使用直接可编程界面的客户程序提供其自身的 GUI。功能组件59的连接是在客户程序逻辑本身内的“硬编码”, 以定义应用程序。
示例:
参考图12,通过根据本发明优选实施例的实例示出FC标签库 指令51、FC标签55、FC59、PC标签库指令53、PC标签57、和 PC161的使用,以生成输出页面79。在此实例中,有包括管理步 骤的指令输入应用程序,以批准指令,在这种情况下,在指令被批 准之后提交指令。
对于该实例,假设先前的JSP49选择指令,并且指令标识符 (orderID)FC59作为来自于在先前JSP49上执行的orderSelect FC 59的返回结果是可用的。
当前JSP49是orderSubmit页面。用于该页面的处理逻辑包括 调用将检索用于选择的指令的指令细节83的FC59(orderGet)。在 这种情况下,将要返回至用户浏览器窗口的结果输出页面79将显 示指令序号81和指令细节83。如果指令细节83不可用,则FC59 返回FC_EXCEPTION_1异常。在这种情况下,应用程序将跳转到 错误JSP(noOrderError.jsp)。通过转发一般的错误JSP页面 (error.jsp)处理任意其他异常。
定义用于输出页面79布局的PT61利用在该应用程序中的所 有页面中共有的PT页眉85(orderApplicationHeader.html)和PT页 脚87(orderApplicationFooter.html)(以HTML格式)。没有插入到 PT页眉85和PT页脚87内的动态数据,它们是静态表示模板65 的实例。
当前页面的PT主体89来自于orderSubmit HTML文件。该文 件包括将显示指令序号81的文本字段(只读)。该控件通过 id=orderNumField标记。将使用表格控件以表格格式显示指令细节 83。表格控件通过id=orderDetail标记。最后,在页面上具有提交按 钮91,其将调用将实际上提交该指令的随后的JSP页面 (submit.jsp)。PT主体89是动态PT67的实例。
PT HTML文件85、87、和89提供用于由JSP49生成的显示 页面79的布局模板,该布局模板由PC161生成。
用于应用程序这部分的JSP49如下:
2<!--* * * * * * * * * * * * * * * * * * * * * * * * *3This page is used by an administrator to submit an order. 4 * * * * * * * * * * * * * * * * * * * * * * * * * * --> 5 6<%@page session=“true”buffer=“64kb”autoFlush=“true” 7  isThreadSafe=“true”errorPage=“.../errorPage.jsp”%> <%@taglib uri=“/servlet/FunctionComponentTagsClient.jar” prefix=“application component”%> 8 <%@ taglib uri=“/servlet/PresentationComponentTagsClient.jar” prefix=“presentation”%> 9<functionComponent:init> 10<!--Create and OrderGet function component and execute it using the results from a function component(OrderSelect)executed on a previous JSP page.!--> 11<functionComponent:call name=“OrderGet_OrderEntry”> 12<functionComponent:prerequisite target=“Ordered” 13 Source=“OrderSelect_OrderEntry.orderID”/> 14<functionComponent:errorname=“NoOrder”page=“NoOrderErr or.jsp”/> 15</functionComponent:call> 16<!--Define the header presentation.There is no dynamic data in the header presentation.!--> 17<functionComponent:pagename=“header” source=“OrderApplicationHeader” 18 language=“en_CA”format=“html”/> 19 20<!--Define the body presentation.This presentation contains dynamic data.The dynamic data must be connected to the presentation.--> 21<presentation:page name=“body”Source=“OrderSubmit” 22 language=“en_CA”format=“html”/> 23 <presentation:controlname=“OrderNumField”type=“span” id=“OrderNumField” 24parentPresentation=“body”source=“OrderGet_OrderEntry.order Num”/> 25<presentation:control name=“OrderDetails”type=“table” id=“OrderDetail” 26 parentPresentation=“body”source=“OrderGet_OrderEntry.orderDe tailTable”/> 27 28<!--Define the footer presentation.There is no dynamic data in the footer presentation.--> 29 < presentation:page name=“footer” source=“OrderApplicationFooter” 30 language=“en_CA”format=“html”/> 31 32<!--Now that all the elements of the page are available, 33 the page itself can be produced.--> 34<presentation:producePage page=header/> 35<presentation:producePage page=“body”/> 36<presentation:producePage page=“footer”/>
参考图13,根据本发明优选实施例示出了系统10和客户应用 程序71的处理输出的扩展示意图。操作网络终端11的网络用户通 过网络13请求远程定位资源(JSP49)。
JSP49包括:FC标签库指令51,其当处理用户请求时,指定 可以由小服务程序引擎23使用的自定义FC标签55;和PC标签库 指令53,其当汇编在终端11处返回给用户的输出页面79时,指定 可以由小服务程序引擎23使用的自定义PC标签57。JSP49还包 括用于调用其相应的FC59的FC标签55和提供到PC161的连接 的PC标签57。
FC标签55可以用于调用其相应的FC59。其通过指定将要被 调用(通过“name”)的FC59实现。FC标签55进一步定义前提 或输入数据33,并对输入数据33的“source”提供引用101。在此 实例中,输入数据33位于数据库17中,其由应用程序服务器19 通过数据库服务器119被访问。因此,当执行FC59时,通过应用 程序服务器19请求并接收来自数据库17的输入数据33。然后,通 过FC59处理该数据并生成数据输出27。
PC标签可以用于调用其相应的PC161。通过指定将要被调用 (通过“name”)的PC161实现。也对PT61的“source”提供引 用。因此,当执行PC161时,在表示模板61中执行表示指令并生 成相应的表示元素或输出79。
PC标签57可以引用两种类型的PT61中的一种;静态PC65 和动态PT67。通过名称和位置或来源查询PT65和76。静态PT65 是包括定义部分输出页面79的表示元素的ML语句的ML文件。 静态PT65即不包括引用,也不将其与在PC161处理期间由FC59 生成的输出数据27合并。它们通常被保留,以定义那些与客户应 用程序79的所有输出页面79共有的输出页面79的元素(例如, 页眉和页脚),尽管它们的使用不限于此规则。
动态PT67还是包括定义部分输出页面79的表示元素的ML 语句的ML文件。然而,动态PT67还包括至少一个控件63,其对 由FC59生成的输出数据27提供引用或连接69。引用动态PT67 的PC标签57除了动态PT67的名称和“source”之外,还包括包 括在输出页面79的一部分中的对控件63类型的引用和对在PC161 处理期间与控件63合并的“output_data_27”的引用或指令103。
一旦小服务程序引擎23执行编译的Java小服务程序31并处理 用户请求,则其生成输出页面79,该输出页面的一部分由PT65和 67定义。可以认识到,JSP49包括多个PT61,其中每一个用于定 义输出页面79的一部分。这些PT61可以重复使用,所以相同的 PT65、67可以连接到不同配置的PC标签57。例如,可以通过两 个具有引用69的不同的控件将PT67与两个不同的输出数据27连 接。因此,这将在具有通过两个输出数据27的不同内容部分控件 的两个不同主体内容的输出页面79中生成两个表格。
客户应用程序基础架构:
参考图14,示出了使用一系列功能组件59汇编的客户应用程 序的整体结构。出于说明的目的,通过客户应用程序基础架构97 的替换实施例,全部描述小服务客户程序75、容器客户程序93、 和直接可编程界面客户程序95与FC59的相互作用。例如,服务 器19执行用于客户应用程序71的CORBA或EJB界面99来使用。 在执行客户应用程序71处理逻辑期间,在FC59中形成指定的服 务器19调用。
客户应用程序基础架构97定义与构成客户应用程序71的功能 框架一起执行自定义JSP FC标签扩展55和PC标签扩展57库的类。 在优选实施例中,一组类执行用于支持客户应用程序功能组件59 (功能组件基础架构)的自定义JSP扩展库,以及第二组类执行用 于支持应用程序表示组件161(表示组件基础架构)的自定义JSP 扩展库。
功能组件基础架构(FCI):
FC59基础架构提供功能组件59与指定应用客户程序(小服务 客户程序75、容器客户程序93、和DPI客户程序95)之间的界面。 提供用于小服务程序GUI、容器GUI、和直接可编程界面的适当的 连接点。FC基础架构提供一组类,其执行用于支持客户应用程序 的功能组件59的自定义JSP扩展库。这些类包括:Function Component InitTag、FunctionComponentInitTagExtraInfo、 FunctionComponentCallTag、FunctionComponentCallTagExtraInfo、 FunctionComponentPrerequisiteTag、FunctionComponentDebugTag、 FunctionComponentErrorTag、FunctionComponentGetValueTag、和 FunctionComponentGetValueTagExtraInfo。
公共类Function Component InitTag
该类执行用于初始化功能组件自定义标签55的自定义JSP标 签扩展库。该标签存在以定义FunctionComponentInitTagExtraInfo 类中的变量。
公共方法doStartTag()
因为对该标签中内容不支持,该方法简单地返回SKIP_BODY。
公共方法doEndTag()
未请求指定的处理。返回值EVAL_PAGE。
公共类FunctionComponentInitTagExtraInfo
该类创建用于功能组件标签55的全部脚本变量。
公共类FunctionComponentCallTag
该类执行用于功能组件59调用支持的自定义JSP标签扩展库。
公共获取/设置方法
在优选实施例中,标签55的每个属性必须具有关联的获取和 设置方法。具体地,创建以下方法。
.getName(),setName()
.getDontResetAllData(),setDontResetAllData()
.getDebugLevel(),set DebugLevel()
专用方法setFunctionComponentInstance()
该方法存储当前功能组件59的实例。由于可以通过 functionComponent:prerequisite标签和functionComponent:error 标签恢复功能组件59,由functionComponent:call标签设置功能组 件59的实例。
保护方法getFunctionComponentInstance()
该方法保存当前的功能组件59实例。
保护方法setFunctionComponentException()
该方法保存由functionComponent:error标签指定的功能组件 异常名称和页面。异常组存储在关键字为异常名称且值为异常页面 的hashTable中。
专用方法setFunctionComponentException()
该方法返回用于命名异常的异常页面,或者如果没有指定页面 则返回空。
公共方法doStartTag()
分解功能组件59的名称被分解和分隔为类名称和功能组件实 例描述。然后,初始化功能组件59并设置实例描述。将功能组件 实例名称和目标引用保存在作为对话语境一部分的杂凑表中。此 外,使用getFunctionComponentInstance()方法保存功能组件实例 本身。
在该标签的主体中设置前提数据33和异常处理。在处理主体 之后,通过doEndTag()方法实现功能组件59的实际启用。
该标签请求主体,因此该方法简单地返回EVAL_BODY_TAG。
公共方法doAfterBody()
如果存在任意主体内容,则将其附加到用于页面的缓冲输出。
在主体上未请求迭代,因此该方法简单返回SKIP_BODY。
公共方法doEndTag()
将写入用于页面的任意缓冲输出。
必须由主体中的functionComponent:prerequisite标签设置全部 前提数据33。
调用功能组件59的execute()方法。
如果发生(throw)异常,则将必须以下列方式进行解释。如果 存在对异常的错误描述符属性的设置,则可以将该异常将保存在 FunctionComponentException脚本变量中,并且将请求发送到定义 的JSP49。在这种情况下,返回值SKIP_PAGE。在所有的其他情况 下,包括发生非异常的情况,返回值EVAL_PAGE。
公共类FunctionComponentCallTagExtraInfo
该类实现用于在针对functionComponent:Call标签处理异常 (由functionComponent:error标签定义)的情况下设定的 functionComponentException的脚本变量定义。
公共类FunctionComponentPrerequisiteTag
该类实现用于功能组件59的前提数据33设置支持的自定义 JSP标签55扩展库。
公共获取/设置方法
标签的每个属性都具有关联的获取和设置方法。具体地,创建 以下方法。
.getTarget(),setTarget()
.getSource(),setSource()
该属性的每一个的类型为String,而不是前提数据33的实际类 型。
.getValue(),setValue()
.getEmpty(),setEmpty()
公共方法doStartTag()
如果该标签不在functionComponent:Call标签内,则发生适当 的JspTagException。可以使用functionComponent:Call标签处理程 序的getFunctionComponentInstance()方法检索功能组件59对象 本身。因为不支持该标签中的内容,该方法简单地返回 SKIP_BODY。
公共方法doEndTag()
使用对功能组件59类的反射进行设置目标数据元素。
如果设置为empty属性,则将空值用于设置方法。如果设定为 value属性,则提供文字值用于设置方法。否则,必须解释source 属性,以得到用于设置方法的值。
source属性的解释包括以下步骤:
●分离基址名称(如果为一个,则第一个“.”左侧的每个字 符)与定义路径(如果为一个,则第一个“.”右侧的每个字符)
●如果基址名称为脚本变量名称
●则查找脚本变量名称值
●如果基址名称为小服务器程序请求参数名称
●则查找小服务程序请求参数名称值
●否则,基址名称必须为功能组件59的实例名称
●查找功能组件59的实例名称,以得到功能组件59的实例 对象
●如果有定义路径
●则通过调用在定义路径组件的每一个上的获取方法估计 定义路径
●现在,其将是用于前提数据元素的值
●返回值EVAL_PAGE
公共类FunctionComponentDebugTag
该类实现用于功能组件调试支持的自定义JSP标签扩展库。
公共获取/设置方法
在优选实施例中,标签的每个属性必须具有关联的获取和设置 方法。具体地,创建以下方法。
.getDebugLevel(),setDebugLevel()
.getDebugFile(),setDebugFile()
.getValue(),setValue()
.getSource(),setSource()
公共方法doStartTag()
因为对该标签中内容不支持,该方法简单地返回SKIP_BODY。
公共方法doEndTag()
使用对功能组件类的反射进行设置目标数据元素。
如果设置为empty属性,则将空值用于设置方法。如果设定为 value属性,则提供文字值用于设置方法。否则,必须解释source 属性,以得到用于设置方法的值。
source属性的解释包括以下步骤:
●分离基址名称(如果为一个,则第一个“.”左侧的每个字 符)与定义路径(如果为一个,则第一个“.”右侧的每个字符)
●如果基址名称为脚本变量名称
●则查找脚本变量名称值
●如果基址名称为小服务程序请求参数名称
●则查找小服务程序请求参数名称值
●否则,基址名称必须为功能组件59的实例名称
●查找功能组件59的实例名称,以得到功能组件59的实例 对象
●如果有定义路径
●则通过调用在定义路径组件的每一个上的获取方法估计 定义路径
●现在,其将是用于前提数据元素的值
●返回值EVAL_PAGE
公共类FunctionComponentErrorTag
该类实现用于功能组件59错误支持的自定义JSP标签扩展库。
公共获取/设置方法
标签的每个属性必须具有关联的获取和设置方法。具体地,创 建以下方法。
.getName(),setName()
.getPage(),setPage()
公共方法doStartTag()
如果该标签不在functionComponent:Call标签内,则发生适当 的JspTagException。可以使用functionComponent:Call标签处理程 序的getFunctionComponentInstance()方法检索功能组件59对象 本身。因为不支持该标签中的内容,该方法简单地返回 SKIP_BODY。
公共方法doEndTag()
通过调用functionComponent:Call标签处理程序的 setFunctionComponentException()方法进行定义错误。
返回值EVAL_PAGE。
公共类FunctionComponentGetValueTag
该类实现用于获取功能组件59返回的结果数据值的自定义 JSP标签扩展库。
公共获取/设置方法
在优选实施例中,标签的每个属性必须具有关联的获取和设置 方法。具体地,创建以下方法。
.getSource(),setSource()
公共方法doStartTag()
因为对该标签中的内容不支持,该方法简单地返回 SKIP_BODY。
公共方法doEndTag()
使用对功能组件类的反射进行设置目标数据元素。
如果设置为empty属性,则将空值用于设置方法。如果设定为 value属性,则提供文字值用于设置方法。否则,必须解释source 属性,以得到用于设置方法的值。
source属性的解释包括以下步骤:
●分离基址名称(如果为一个,则第一个“.”左侧的每个字 符)与定义路径(如果为一个,则第一个“.”右侧的每个字符)
●如果基址名称为脚本变量名称
●则查找脚本变量名称值
●如果基址名称为小服务程序请求参数名称
●则查找小服务程序请求参数名称值
●否则,基址名称必须为功能组件59的实例名称
●查找功能组件59的实例名称,以得到功能组件59的实例 对象
●如果有定义路径
●则通过调用在定义路径组件的每一个上的获取方法估计 定义路径
●现在,其将是用于前提数据元素的值
●返回值EVAL_PAGE
公共类FunctionComponentGetValueTagExtraInfo
该类实现用于对functionComponent:getValue标签设定的 resultValue的脚本变量定义。
表示组件基础架构(PCI)
PC161基础架构提供一组类,其实现用于支持用户应用程序的 表示组件161的自定义JSP扩展库。这些类包括 PresentationPageTag、PresentationControlTag、 PresentationAttributeTag、以及PresentationProducePageTag。
公共类PresentationPageTag
该类实现用于表示组件161支持的自定义JSP标签扩展库。
公共获取/设置方法
PC标签57的每个属性必须具有关联的获取和设置方法。具体 地,创建以下方法。
.getName(),setName()
.getRoot(),setRoot()
.getSource(),setSource()
.getFormat(),setFormat()
.getLanguage(),setLanguage()
公共方法doStartTag()
因为对该标签中的内容不支持,该方法简单地返回 SKIP_BODY。
公共方法doEndTag()
初始化页面制作者对象,命名为名称属性的值并存储在 pageContext中。使用source、format、和language属性确定关联的 ML文件。
所有处理完成之后,返回值EVAL_PAGE。
公共类PresentationControlTag
这组类实现用于指定控件的表示组件161支持的自定义JSP标 签扩展库。
公共获取/设置方法
标签的每个属性必须具有关联的获取和设置方法。具体地,创 建以下方法。
.getName(),setName()
.getType(),setType()
.getId(),setId()
.getParentPresentation(),setParentPresentation()
.getSource(),setSource()
.getValue(),setValue()
.getEmpty(),setEmpty()
公共方法doStartTag()
该标签57请求主体,因此该方法简单地返回 EVAL_BODY_TAG。
公共方法doAfterBody()
如果存在任意主体内容,则其应该附于用于页面的缓冲输出。 在主体上没有请求迭代,因此,该方法简单地返回SKIP-BODY。
公共方法doEndTag()
该双亲名称为已知的页面制造者对象或在pageContext中发现 的控件对象。
初始化适当类型的控件,并存储在pageContext中。
设置控件的数据控件属性。如果设置为empty属性,则将空值 用于属性。如果设定为value属性,则其提供文字值用于属性。否 则,解释source属性,以得到用于属性的值。source属性的解释包 括以下步骤:
●分离基址名称(如果为一个,则第一个“.”左侧的每个字 符)与定义路径(如果为一个,则第一个“.”右侧的每个字符)
●如果基址名称为脚本变量名称
●则查找脚本变量名称值
●如果基址名称为小服务程序请求参数名称
●则查找小服务程序请求参数名称值
●否则,基址名称必须为功能组件59的实例名称
●查找功能组件59的实例名称,以得到功能组件59的实例 对象
●如果有定义路径
●则通过调用在定义路径组件的每一个上的获取方法估计 定义路径
●现在,其将是用于前提数据元素的值
●全部处理完成之后,返回值EVAL_PAGE
公共类PresentationAttributeTag
这组类实现用于指定控件属性的表示组件161支持的自定义 JSP标签扩展库。
公共获取/设置方法
该标签的每个属性必须具有关联的获取和设置方法。具体地, 创建以下方法。
.getName(),setName()
.getSource(),setSource()
.getValue(),setValue()
.getEmpty(),setEmpty()
公共方法doStartTag()
因为对标签中的内容不支持,该方法简单地返回SKIP_BODY。
公共方法doEndTag()
在pageContext中发现双亲控件并设置属性。
如果设置为empty属性,则将空值用于属性。如果设定为value 属性,则其提供文字值用于属性。否则,解释source属性,以得到 用于属性的值。source属性的解释包括以下步骤:
●分离基址名称(如果为一个,则第一个“.”左侧的每个字 符)与定义路径(如果为一个,则第一个“.”右侧的每个字符)
●如果基址名称为脚本变量名称
●则查找脚本变量名称值
●如果基址名称为小服务程序请求参数名称
●则查找小服务程序请求参数名称值
●否则,基址名称必须为功能组件59的实例名称
●查找功能组件59的实例名称,以得到功能组件59的实例 对象
●如果有定义路径
●则通过调用在定义路径组件的每一个上的获取方法估计 定义路径
●现在,其将是用于前提数据元素的值
●全部处理完成之后,返回值EVAL_PAGE
公共类PresentationProducePageTag
该类实现用于生成输出页面的表示组件161支持的自定义JSP 标签扩展库。
公共获取/设置方法
标签的每个属性均具有关联的获取和设置方法。具体地,创建 以下方法。
.getPage(),setPage()
尽管参考某些具体的实施例描述了本发明,对于本领域技术人 员来说,在不背离在所附权利要求中概括的本发明的精神和范围的 情况下,各种更改显而易见。
QQ群二维码
意见反馈