练习 1.1:程序和 PageHandler
在此练习中,将学习执行您的命令的两种主要的 EGL 部件类型。在此练习中,虽然您不会创建任何文件或编写任何代码,但是下面的练习假定您对 EGL 程序和 PageHandler 的结构方式有基本的了解。先仔细地阅读此练习,然后再继续学习下一个练习,在该练习中将创建基本的 PageHandler。
EGL 逻辑部件
逻辑部件是定义命令的运行时顺序的一段 EGL 代码。有几种不同的 EGL 逻辑部件类型,但此练习只讨论下面两种:
- 程序
- 程序是一个通用的逻辑部件,几乎可以用于任何技术或业务逻辑处理任务。例如,EGL 程序可编译为 COBOL 并在大型机上运行,或者可编译为 Java 并在应用程序服务器上运行。EGL 程序不能控制 Web 页面的运行时行为。
- PageHandler
- PageHandler 是专用的逻辑部件。PageHandler 控制单个 Web 页面的运行时行为。当打开 Web 页面时,PageHandler 访问正确显示页面所需的数据,例如,请求参数和数据库记录。PageHandler 还响应在页面上发生的事件,例如,当用户单击提交按钮时。然后,PageHandler 执行链接至页面上发生的事件的程序逻辑。
您在此教程中创建的大部分逻辑部件都是 PageHandler,但您编写的大部分代码在 PageHandler 和程序中的工作方式相同。
一个简单的 EGL 程序
package data;
import businessRules.*;
program myEGLProgram type basicProgram
myIntegerVariable int;
myCharVariable char(20);
function main()
myIntegerVariable = 5;
myOtherFunction();
end
function myOtherFunction()
myCharVariable = "This is my character variable.";
end
end
以下是此程序中的代码的描述,按从上到下列出:
- package data;
- 此代码定义程序的包和作用域。在此示例中,程序位于 data 包中。package 语句是必需的并且必须在文件的顶部。
- import businessRules.*;
- 一般情况下,当使用位于另一个包中的部件时,必须用包名限定这些部件的名称。例如,程序可能会引用部件 myPackage.myPart。
当使用 import 语句来导入该部件时,不再需要用它的包名限定它的名称。如果已经导入了包
myPackage 中的部件 myPart,则可以引用 myPart 而不是 myPackage.myPart。
例如,该 import 语句导入了 businessRules 包中的所有部件。当在此程序中使用那些部件时,不需要用 businessRules 包的名称限定它们。Import 语句是可选的,但如果使用了它们,则它们必须位于文件的顶部,program 语句的前面。
- program myEGLProgram type basicProgram
- program 语句定义程序的名称、程序的类型以及传递给程序的参数。program 语句是必需的并且程序的名称必须与文件的名称相符。在此示例中,program 语句将程序命名为 myEGLProgram。
program 语句在文件末尾有相匹配的 end 语句。此处列出的所有其它代码(例如,创建变量和函数的代码)都必须在 program 语句与它的 end 语句之间。某些类型的部件定义(例如,记录和 dataItem 定义)可以出现在程序的 end 语句后面,当然比较好的编程习惯是将这些部件定义放在库或其它独立的文件中。如果您确定只会在此程序中使用这些部件,则您可能想要将部件定义放在程序的 end 语句后面。
- myIntegerVariable int;
myCharVariable char(20);
- 这两个语句创建 EGL 变量。由于这些变量是在任何函数外面创建的,所以程序中的任何函数都可以访问它们。这些变量必须在程序中创建,这就表示必须在
program 语句与 program 语句的 end 语句之间创建这些变量,从而可以在整个程序范围内使用这些变量。在函数中创建的变量只能在该函数中使用。
-
- function main()
myIntegerVariable = 5;
myOtherFunction();
end
- main 函数是程序可操作区域的开头。当程序运行时,首先调用 main 函数。因此,main 函数是必需的。
- function myOtherFunction()
myCharVariable = "This is my character variable.";
end
- 可在程序中的任何位置编写类似此样本函数的其它函数。
- end
- 最后一个 end 语句结束程序定义。
一个简单的 EGL PageHandler
package pagehandlers;
import businessRules.*;
PageHandler myPage {view="myPage.jsp", onPageLoadFunction=onPageLoad}
myIntegerVariable int;
myCharVariable char(20);
function onPageLoad()
myIntegerVariable = 5;
myOtherFunction();
end
function myOtherFunction()
myCharVariable = "This is my character variable.";
end
end
以下是此 PageHandler 代码的描述,按从上到下列出。此样本 PageHandler 中的大部分代码与样本程序相同。
- package pagehandlers;
- 与程序一样,PageHandler 必须位于包中以定义它的作用域。
- import businessRules.*;
- 与程序一样,PageHandler 可以导入其它包。
- PageHandler myPage {view="myPage.jsp", onPageLoadFunction=onPageLoad}
- PageHandler 定义与程序定义类似。与程序定义一样,PageHandler 的名称必须与文件的名称相同。PageHandler 定义在文件末尾也有相匹配的 end 语句。与程序一样,某些类型的部件定义(例如,记录和 dataItem 定义)可以出现在 PageHandler 的 end 语句后面。
pagehandler 语句也包括 EGL 属性。代码 view="myPage.jsp" 将 PageHandler 链接至它控制的 Web 页面。代码
onPageLoadFunction=onPageLoad 指定装入页面时将调用 PageHandler 中的哪个函数。
- myIntegerVariable int;
myCharVariable char(20);
- 与程序一样,PageHandler 可以具有部件范围的变量。在 PageHandler 的此区域中声明的变量可以绑定至 Web 页面的字段,从而允许您在 Web 页面上使用该数据。在下一个练习中,您将学习如何将 EGL 变量绑定到 Web 页面上的字段中。
-
- function onPageLoad()
myIntegerVariable = 5;
myOtherFunction();
end
- 与程序一样,PageHandler 具有在装入页面时调用的函数。与程序不同的是,此函数不一定要命名为 main。而是,PageHandler 定义中的 onPageLoadFunction 属性将指定在装入页面时要调用哪个函数。通常,此函数从数据库或其它数据源读取信息并将这些信息用于页面上。
- function myOtherFunction()
myCharVariable = "This is my character variable.";
end
- 与程序一样,PageHandler 可以包括其它函数。
- end
- 与程序一样,PageHandler 必须以 end 语句结尾。
现在,您可以开始进行练习 1.2:基本变量了。