怀疑论者的JSF - JSF转换与验证 - 编程入门网
怀疑论者的JSF - JSF转换与验证时间:2011-03-13 IBM Rick Hightower本月,Rizon Software 的 CTO Paul Tabor 应邀与我一道解除针对 JSF 的 FUD。在本文中,我们将介绍 JSF 转换和验证框架的概念,它比您所想的要容易使用得多,也灵活得多。 首先我们将介绍应用于 JSF 生命周期的转换和验证过程,然后展示一个简单的 JSF 应用程序中的默认转换和验证过程。接着将展示如何创建和插入自定义的实现,以应对要求更高的场景。正如 Rick 在以前的文章中所说的,我们会理论与实践并重,先介绍概念,再用一个实际例子说明这些概念的应用。示例应用程序将涵盖大多数转换和验证用例,虽然只是初级的。 注意,示例应用程序的默认编译环境是 Maven,不过, 还提供了一个 Ant 脚本。可以单击本页顶部或者底部的 Code 图标下载示例源代码。为了简便起见,您会发现,该例子的设置与上一篇文章中的一样。关于构建环境配置的更多说明,包括在 Ant 环境中而不是在 Maven 环境中编译和运行示例应用程序的说明,请参阅参考资料。 转换和验证 虽然在 JSF Web 应用程序中使用转换和验证不一定要理解 JavaServer Faces 生命周期的基础知识,但是在深入转换和验证内容之前,最好对一些基本知识做一回顾。此外,掌握一点 JSF 生命周期技巧可以极大地帮助简化 Web 应用程序的开发工作。还有助于更好地理解 JSF 的可插入能力。 图 1 描绘了我们所说的“基本 JSF 生命周期”。 基本 是在暗示这只是一个典型的处理所提交表单值的请求-响应(request-and-response)场景。 图 1. 基本 JSF 生命周期 显然,不同的场景对这里重点描述的生命周期有不同的影响。我们将在本文稍后介绍其中一些场景。现在,只需要注意转换和验证过程发生在应用请求值、处理验证 和呈现响应 阶段即可。 我们将在稍后介绍为什么转换和验证会在这些阶段出现,但是首先让我们澄清一个更基本的问题:转换 是什么?简单地说,转换是确保数据拥有正确的对象或者类型的过程。下面是两个典型的转换: 字符串值可以转换为 java.util.Date。 字符串值可以转换为 Float。 至于验证,它用于确保数据包含所期望的内容。下面是两个典型的验证: java.util.Date 的格式为 MM/yyyy。 Float 在 1.0 和 100.0 之间。 关注生命周期阶段 转换和验证的主要目的是确保在更新模型数据之前已经经过了正确的无害处理。之后,当需要调用应用程序方法用这些些数据实际做一些事情 时,就可以有把握地假定模型的某些状态。转换和验证使您可以侧重于业务逻辑,而不是侧重于对输入数据进行繁琐的资格认定,比如 null 检验、长度限定、范围边界,等等。 因此,在更新模型数据 生命周期阶段中,在组件数据被绑定到 backing bean 模型之前 进行转换和验证处理是有道理的。正如图 1 所示,转换发生在应用请求值阶段,而验证发生在处理验证阶段。图 2 突出显示了这些阶段。 图 2. 要关注的转换和验证阶段 怀疑论者的JSF - JSF转换与验证(2)时间:2011-03-13 IBM Rick Hightower关于 immediate 属性 注意,图 2 中描绘的转换和验证过程表示了将 UIInput 组件的 immediate 属性设置为 false 时的应用程序流程。如果这个属性设置为 true,那么转换和验证会发生在生命周期更早的时期,即应用请求值阶段(参见图 3)。对使用 immediate 属性的详细讨论超出了本文的范围,但是在某些情况下,比如管理动态清单(可能您还记得,本系列的上一篇文章中曾介绍过),它很有用,它甚至可以绕过验证(在与 UICommand 组件结合使用时)。能想像一个需要完全绕过验证的应用程序吗? 图 3 展示了当 immediate 属性设置为 true 时,在 JSF 应用程序生命周期中的哪些地方进行转换和验证。 图 3. 将 i |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |