PageHandler

EGL PageHandler页面代码的一个示例;它控制用户与 Web 页面的运行时交互,并且可以执行下列任何任务:

最简单的工作方式是在 Page Designer 中定制 JSP 文件并创建 PageHandler;有关详细信息,请参阅 EGL 的 Page Designer 支持

PageHandler 本身包含变量和下列类型的逻辑:

以两种方式访问 PageHandler 中的变量:

pageHandler 部件应该是简单的。虽然此部件可以包含轻量级数据验证(如范围检查),但建议您调用其它程序来执行复杂的业务逻辑。例如,应该让被调用程序来进行数据库访问。

与 PageHandler 相关联的输出

保存 PageHandler 时,EGL 会将 JSP 文件放在项目文件夹 WebContent\WEB-INF 中,但仅在以下情况下如此:
  • 对 PageHandler view 属性指定了一个值,该值指定 JSP 文件名
  • 文件夹 WebContent\WEB-INF 未包含具有指定名称的 JSP 文件

EGL 决不会覆盖 JSP 文件。

如果工作台首选项设置为在保存时自动进行构建,则每当您保存 PageHandler 时都会生成 PageHandler。在任何情况下,当生成 PageHandler 时,输出都由下列对象组成:
  • 页 bean 是一个 Java™ 类,它包含数据并为 Web 页面提供初始化、数据验证和事件处理服务。
  • 将在项目中的 JSF 配置文件中放置一个 <managed-bean> 元素,以便在运行时标识页 bean。
  • 将在 JSF 应用程序配置文件中创建一个 <navigation-rule> 元素,以使 JSF 结果(PageHandler 的名称)与将要调用的 JSP 文件相关联。
  • JSP 文件,在保存 PageHandler 时所处的情况下。

还将生成由部件处理程序使用的所有数据表和记录。

验证

如果基于 JSP 的 JSF 标记执行数据转换、验证或事件处理,则当用户提交 Web 页面时,JSF 运行时将立即执行必需的处理。如果找到错误,则 JSF 运行时可能重新显示页面,而不将控制权传递至 PageHandler。但是,如果 PageHandler 接收控制权,则 PageHandler 可能会执行一组基于 EGL 的验证。

如果在声明 PageHandler 时指定下列详细信息,则会进行基于 EGL 的验证:
  • 各个输入字段的元素编辑(如最小输入长度)。
  • 各个字段的基于类型的编辑(字符和数字)。
  • 各个输入字段的 DataTable 编辑(范围、匹配有效和匹配无效),DataTable 部件对此作了说明。
  • 各个输入字段的编辑功能。
  • 整个 PageHandler 的编辑功能。
PageHandler 按以下顺序监视编辑,但仅对被用户更改了值的项执行监视:
  1. 所有基本编辑和基于类型的编辑,即使某些编辑失败
  2. (如果先前编辑成功的话)所有表编辑,即使某些编辑失败
  3. (如果先前编辑成功的话)所有字段编辑功能,即使某些编辑功能失败
  4. (如果所有先前编辑都成功的话)pageHandler 编辑功能

页项属性 validationOrder 定义各个输入字段的编辑顺序以及字段验证器函数的调用顺序。

如果未指定 validationOrder 属性,则缺省顺序是 PageHandler 中定义的项顺序,即从上到下。如果对 PageHandler 中的某些项(但不是所有项)定义了 validationOrder,则首先对所有带有 validationOrder 属性的项进行验证,并且是按指定的顺序进行的。然后,对不带 validationOrder 属性的项进行验证,按照该项在 PageHandler 中的顺序从上到下进行。

运行时方案

本节提供有关用户与 Web 应用程序服务器之间进行的运行时交互的技术概述。

当用户调用受 PageHandler 支持的 JSP 时,将执行下列步骤:
  1. Web 应用程序服务器初始化环境:
    1. 构造一个会话对象以便跨多次交互保留用户访问的应用程序所需的数据
    2. 构造一个请求对象以便保留有关用户的当前交互的数据
    3. 调用 JSP
  2. JSP 处理一系列 JSF 标记以构造 Web 页面:
    1. 创建一个 PageHandler 实例,致使使用用户指定的自变量来调用 onPageLoad 函数(如果有的话)并将 PageHandler 放到请求对象中
    2. 访问存储在请求和会话对象中的数据,以将那些数据包括在 Web 页面中
    注: pageHandler 部件有一个名为 onPageLoadFunction 的属性,该属性标识在 JSP 启动时调用的 PageHandler 函数。该函数自动检索任何传递给它的由用户提供的自变量;它可以调用其它代码;它可以将其它数据放到 Web 应用程序服务器的请求或会话对象中;但该函数既不会将控制权转交给另一个页面也不会在第一次将页面显示给用户时显示错误消息。
  3. JSP 将 Web 页面提交给用户,Web 应用程序服务器将破坏响应对象,而留下会话对象和 JSP。
如果用户在与 HTML <FORM> 标记相关联的屏幕字段中提供数据并提交表单,则执行下列步骤:
  1. Web 应用程序服务器重新初始化环境:
    1. 构造一个请求对象
    2. 将对提交的表单接收到的数据放入页 bean 以进行验证
    3. 重新调用 JSP
  2. JSP 处理一系列 JSF 标记以将接收到的数据存储在页 bean 中。
  3. 运行时 PageHandler 验证数据:
    1. 执行相对基本的编辑(如最小输入长度),这些编辑是在 pageHandler 数据声明中指定的
    2. 调用任何特定于项的验证函数,这些函数是在 pageHandler 数据声明中指定的
    3. 调用 pageHandler 验证器函数,如果您希望根据另一个字段的内容来至少部分地验证一个字段,则需要这样做

    (有关验证的详细信息,请参阅上一节。)

  4. 如果发生错误,则 EGL 运行时将错误放在 JSF 队列中,并且 JSP 重新显示带有嵌入消息的 Web 页面。但是,如果未发生错误,则结果如下所示:
    1. 将存储在页 bean 中的数据写至记录 bean
    2. 后续处理由事件处理程序确定,该事件处理程序是在与用户单击的按钮或超链接相关联的 JSF 标记中标识的。

事件处理程序可以将处理转发至 JSF 标签,该标签标识基于运行时 JSF 的配置文件中的映射。而映射又标识要调用的对象,该对象是 JSP(通常是与 EGL PageHandler 相关联的 JSP)或 servlet。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.