| 在本教程中,将使登录页面上的组件与两个虚拟表单相关联。一个虚拟表单处理用于创建新登录帐户的信息,另一个虚拟表单处理有关老用户的信息。通过将表示新用户的组件与一个虚拟表单相关联,以及将表示老用户的组件与另一个虚拟表单相关联,应用程序可以处理任意一组组件,就像这些组件位于它们自己单独的页面上一样。 |
|
目录
|
![[spacer]](/im/a.gif) |
 |
关于虚拟表单
通过虚拟表单,您可以限制在提交 Web 页时处理的输入字段。虚拟表单的两个基本元素是其输入组件和提交组件。输入组件(如“文本字段”、“文本区域”、“下拉列表”和“单选按钮”组件)用于参与虚拟表单。提交组件(最常见的是“按钮”或“链接”组件)用于提交虚拟表单。提交虚拟表单时,将处理虚拟表单的参与组件,而忽略页面上的其他组件;从本质上说,就像虚拟表单的参与组件位于它们自己的页面上那样处理它们。一个页面可以包含多个虚拟表单,并且每个虚拟表单都单独地进行处理。
打开 Login 示例项目
在本部分中,将打开一个提供登录页面的示例项目。此项目将被用作创建虚拟表单的起点。
- 打开
Login.zip 文件,并将其内容解压缩到 Java Studio Creator 项目目录中。在 Windows 计算机上,此目录通常为 C:\Documents and Settings\<user name>\My Documents\Creator\Projects。
- 在 Java Studio Creator IDE 中,选择“文件”>“打开项目”,然后打开 Login 项目。
- 当 Login 项目出现在“项目”窗口中时,选择“运行”>“运行主项目”(或单击工具栏中的“运行主项目”按钮)以生成并运行项目。
在浏览器中,您应看到 Chimney Sweep Central 应用程序的欢迎页。
- 单击页面左上部的 "Login" 链接。
- 在老用户部分(第一部分)中,在 "User Name" 文本字段中输入
admin,并在 "Password" 文本字段中输入 admin。
- 单击 "Login" 按钮。
图 1 显示了结果。页面上的所有文本字段将被验证,其中包括新用户帐户部分中的字段。由于这些字段中没有输入值,因此它们将返回错误。但是,您希望应用程序将老用户和新用户分开处理。解决方案是使用虚拟表单,如下一部分所述。
图 1:没有虚拟表单的登录应用程序 |
将组件与虚拟表单相关联
通过将表示老用户的组件与一个虚拟表单相关联,以及将表示新用户的组件与另一个虚拟表单相关联,您可以处理任意一组组件中的输入字段,就像这些组件位于它们自己单独的页面上一样。在本部分中,将创建和配置老用户的虚拟表单。
- 在 IDE 的“项目”窗口中,展开 "Login" >“Web 页”,然后双击 Login.jsp。
- 在 "Login" 页中,右键单击空白处,然后从弹出式菜单中选择“虚拟表单”。
- 在“虚拟表单”对话框中单击“新建”。
- 在“颜色”字段中双击,然后从下拉列表中选择红色。
- 在“名称”字段中双击,键入
returningCustomer,然后按 Enter 键。
图 2 显示了“虚拟表单”对话框。与 returningCustomer 虚拟表单关联的组件将由红色边框标识。
图 2:“虚拟表单”对话框 |
- 单击“确定”应用更改并关闭对话框。
- 单击可视设计器工具栏中的“显示虚拟表单”按钮 (
)。
此操作将打开虚拟表单的显示。在可视设计器中,您将看到一个将颜色与特定虚拟表单匹配的虚拟表单图例。如果一个页面上有多个虚拟表单,则图例非常有用,在下一部分中您将看到这一点。现在,将组件添加到虚拟表单。
- 在可视设计器中,按住 Ctrl 键单击老用户部分中的 "User Name" 文本字段、"Password" 文本字段和 "Remember My User Name" 复选框。
- 右键单击三个选定组件中的任何一个,然后选择“配置虚拟表单”。
- 确保 retUserNameTextField、retPasswordField 和 remUserNameCheckbox 出现在“配置虚拟表单”对话框的顶部,如图 3 所示。然后在“参与”字段中双击,从下拉列表中选择“是”,再单击“确定”。
现在 "User Name" 字段、"Password" 字段和 "Remember My User Name" 复选框具有红色实线边框,以表明它们参与了 returningCustomer 虚拟表单。这意味着在提交虚拟表单时将处理这些组件。请注意,只有输入组件才适合参与虚拟表单。其他类型的输入组件包括“文本区域”、“下拉列表”和“单选按钮”组件。从技术上讲,输入组件是实现 EditableValueHolder 接口的组件。
图 3:“配置虚拟表单”对话框 |
- 在可视设计器中,右键单击 "Login" 按钮,然后选择“配置虚拟表单”。
- 在“配置虚拟表单”对话框中,确保 loginButton 出现在顶部。然后将“提交”字段设置为“是”,再单击“确定”。
"Login" 按钮此时具有虚线边框,以表明它提交 returningCustomer 虚拟表单。“按钮”和“链接”组件是最常用的提交组件。这些组件将提交 Web 页,因为它们可以实现 ActionSource 接口。
图 4 用颜色编码的边框显示了 returningCustomer 虚拟表单的参与组件和提交组件。
图 4:虚拟表单颜色编码 |
将另一个虚拟表单添加到页面
现在,为新用户部分中的组件创建一个虚拟表单。虚拟表单机制将处理此虚拟表单的参与组件,而忽略页面上的所有其他输入组件(包括与 returningCustomer 虚拟表单关联的输入组件)。这一次将直接在“配置虚拟表单”对话框中创建虚拟表单。
- 在页面上单击一下,以便确保在老用户部分中未选定任何组件。
- 按住 Ctrl 键选择新用户部分中的 "User Name"、"Password" 和 "Password (Repeat)" 文本字段。
- 右键单击三个选定组件中的任何一个,然后选择“配置虚拟表单”。
确保 newPasswordRepeatField、newUserNameTextField 和 newPasswordField 出现在“配置虚拟表单”对话框的顶部。
- 单击“新建”。
一个新的虚拟表单将被添加到对话框。
- 将“颜色”设置为绿色,将“名称”设置为
newUser,将“参与”设置为“是”,然后单击“确定”。
新虚拟表单的名称和颜色将出现在虚拟表单图例中。这三个组件的边框将变为绿色实线。
- 右键单击 "Create New Account" 按钮,然后选择“配置虚拟表单”。
- 在 newUser 虚拟表单的条目中,将“提交”设置为“是”,然后单击“确定”。
按钮的边框将变为绿色虚线。
测试应用程序
- 运行应用程序。
- 单击页面左上部的 "Login" 链接。
- 在老用户部分中,在 "User Name" 文本字段中输入
admin,在 "Password" 文本字段中输入 admin,然后单击 "Login" 按钮。
应用程序将使您登录,并打开“欢迎”页。新用户部分中的输入字段未进行验证。
- 通过填写新用户帐户的信息再单击 "Create New Account" 按钮,继续测试应用程序。
执行更多操作:保留和放弃提交的值
缺省情况下,当用户提交一个虚拟表单后又使同一页面重新显示出来时,不参与该虚拟表单的任何输入字段都将保留其提交值。要了解此功能,请尝试以下操作:
- 填写三个字段以创建一个新帐户。
但是,在单击 "Create New Account" 按钮之前,您怀疑可能已经为此应用程序创建了此用户名和口令。
- 在不修改新用户部分中各条目的情况下,作为老用户输入相同的用户名和口令,然后单击 "Login" 按钮。
将出现一条消息,指示无法识别该用户名。将保留新用户部分中的输入字段并显示其条目,因为它们不参与 returningCustomer 虚拟表单。同样,当您单击 "Create New Account" 按钮以提交 newUser 虚拟表单时,也将保留老用户部分中的输入字段并显示其条目,因为它们不参与 newUser 虚拟表单。
注意: 在某些情况下,您需要覆盖缺省行为并明确地放弃非参与输入字段的提交值。通过在页面 Bean 代码中调用表单组件的方法,可以完成此操作。有关这一技术的详细信息,请参见技术文章 如何使用虚拟表单。
-
要完成帐户的注册,请单击 "Create New Account" 按钮。
将组件与虚拟表单相关联的规则
下面是将组件与虚拟表单相关联时应该遵循的一些规则:
- 一个虚拟表单可以有零个或多个参与组件。
- 一个虚拟表单可以有一个或多个提交组件。
- 一个输入组件可以参与多个虚拟表单。
- 一个提交组件只能提交一个虚拟表单。
- 只有输入组件才适合参与虚拟表单。同样,要使组件适合提交虚拟表单,该组件必须是提交组件。
- 输入组件既可以参与虚拟表单,也可以提交虚拟表单。要使输入组件提交 Web 页,必须打开组件的“更改时自动提交”功能(通过组件的弹出式菜单可以访问此功能)。既参与虚拟表单又提交虚拟表单的组件,其左侧和顶部边框为实线,右侧和底部边框为虚线。下拉列表是既可以参与又可以提交虚拟表单的最常用输入组件。
- 与虚拟表单关联的组件可以出现在页面上的任何位置,不需要同位。
有关虚拟表单和页面片段的说明
在 Java Studio Creator 2 IDE 中,不支持页面片段内的虚拟表单。要配置对页面片段中的组件进行选择性处理,您必须将这些组件的 immediate 属性设置为 True。此解决方案足以适合许多用例;但是,它在一定程度上仍具有局限性,因为它只能配置对一组组件进行选择性处理。
另请参见:
此页的最新修改时间:2006 年 1 月 25 日
|