通过虚拟表单,您可以在提交 Web 页时限制在 Web 页上处理的输入字段。例如,假设有一个购物车页面,它显示了订购和送货信息。您需要让该应用程序允许用户分别更新他们的送货和订购信息。当用户单击 "Update Shipping" 按钮时,您只希望处理送货输入字段(即转换、验证并映射到绑定目标)。相反,当用户单击 "Update Order" 按钮时,您只需要处理订单输入字段。如果单击 "Update Order" 按钮时处理了送货输入字段(反之亦然),则这些字段上出现任何转换或验证错误都会造成提交任务无法完成。但是,拒绝提交会违反应用程序允许分别更新订单和送货字段(相互之间不会受到干扰)的功能要求。 虚拟表单提供了一个功能强大的解决方案来解决此问题。虚拟表单在页面上定义了一组输入和提交组件。输入组件用于参与虚拟表单,而提交组件用于提交虚拟表单。Web 站点用户与提交虚拟表单的组件交互时,将处理虚拟表单的参与方,而忽略页面上的其他输入(有关输入和提交组件的详细定义,请参见技术文章“如何使用虚拟表单”)。 要处理本示例,您可以创建一个 OrderInfo 虚拟表单,并且使订单输入字段("Product"、"Quantity" 和 "Requested Date")参与该虚拟表单,"Update Order" 按钮提交该虚拟表单。同样,您还可以创建一个 ShippingInfo 虚拟表单,并且使送货输入字段("Street"、"City"、"State" 和 "Zip Code")参与该虚拟表单,"Update Shipping" 按钮提交该虚拟表单。按此方式配置这两个虚拟表单,可以确保仅基于用户单击的按钮来处理正确的输入字段。 此示例相对比较简单,其原因是:没有任何输入组件参与多个虚拟表单;没有任何输入组件既是虚拟表单的参与方又是虚拟表单的提交方;每个虚拟表单的参与方和提交方在物理位置上彼此邻近。在更为复杂的图形用户界面 (Graphical User Interface, GUI) 中,各种输入组件可能参与多个虚拟表单;某些输入组件可能既提交虚拟表单又参与一个或多个虚拟表单;每个虚拟表单的参与方和提交方可能分布在页面上的不同物理位置。 虚拟表单在简化应用程序编程模型方面前进了一大步。过去,如果要基于用户使用的提交组件来限制页面上的输入处理,则必须使用 immediate 属性(在某些情况下,还必须编写代码以删除多余的输入)。这种方法存在着一些缺点。首先,immediate 属性只允许指定一组要选择性地进行处理的输入。这意味着无法生成 Web 页(如本示例中的页面),因为该页面包含多组要选择性地进行处理的输入。其次,immediate 属性的使用存在着一定的难度,因为它会修改 JavaServer Faces 生命周期,从而导致在不同的生命周期阶段发生某些事件,以及跳过某些生命周期阶段。虚拟表单解决了这些问题,因为它们允许指定多组要选择性地进行处理的输入(即,可以在页面上指定多个虚拟表单)。此外,虚拟表单不会修改 JavaServer Faces 生命周期。 在 IDE 中,您可以查看、创建、重命名以及删除虚拟表单(删除虚拟表单时,不会删除与该表单关联的组件)。此外,您还可以将页面上的组件与一个或多个虚拟表单关联。要执行此操作,请选择要与虚拟表单关联的组件,单击鼠标右键,然后选择“配置虚拟表单”弹出式菜单项。这将打开一个对话框,您可以在其中指示这些组件参与和/或提交的虚拟表单。图 1 说明了如何将 "Street" 文本字段指定为 ShippingInfo 虚拟表单的参与方。
您可以容易地识别与虚拟表单关联的组件,这是因为 IDE 使用了不同的颜色边框来标识这些组件。仅参与虚拟表单的组件具有实线边框。仅提交虚拟表单的组件具有虚线边框。对于既参与虚拟表单又提交虚拟表单的组件,其左侧和顶部边框为实线,右侧和底部边框为虚线。当您切换到显示虚拟表单的选项时,可视设计器窗口将根据每个虚拟表单的颜色方案来突出显示与虚拟表单关联的所有组件。可视设计器中还包含一个虚拟表单图例,该图例显示了与特定虚拟表单匹配的颜色,如果一个页面上有多个虚拟表单,该图例将特别有用。图 2 显示了用颜色区分两个虚拟表单的页面。
正如您所看到的一样,虚拟表单是一个功能强大的工具,您可以轻松地将其合并到应用程序中。通过使用虚拟表单,您可以用 Creator 生成比以前更复杂的 GUI。有关详细信息,请参见文章“如何使用虚拟表单”(及其可下载的示例)。 |
| ||||||||||||||
|
| ||||||||||||