快速业务通道

Seam - 无缝集成JSF,第2部分: 借助Seam进行对话 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
的属性。然后如果不存在 CourseAction 类实例,则创建之。

如果 courses 属性的值为 null,Seam 就会再次使用该属性的名称作为键查找 @Factory 注释。借助 findCourses() 方法找到匹配之后,Seam 调用它来初始化该变量。最后作为 courses 提取该属性的值,将其包装到 DataModel 实例。现在 JSF 变量解析器和视图就可以使用包装的值。任何针对此上下文变量的后续请求都会返回已经准备好的课程集合。

既然已经清楚检索课程列表以及在 Seam 托管的上下文变量中维护该值的方法,下面研究课程列表以外的内容。您已经准备好与课程目录进行交互。在以下几节中,将使用显示单门课程详细内容(以及添加、编辑和删除课程)的功能,扩展 Open 18 应用程序。

实现 CRUD 的巧妙方式

遇到的第一项 CRUD 操作是显示从课程列表中选出的单门课程的详细内容。 JSF 规范实际上为您处理了一些数据选择收集工作。当从 UIData 组件(如h:dataTable)的某行触发 h:commandLink 之类的操作时,在调用事件监听程序之前,组件的当前行设置为与该事件相关的行。可以将当前行想象成一个指针,在这个例子中,该指针固定在接受该操作的行。实际上,JSF 了解行操作与该行的底层数据有关。处理该操作时,JSF 帮助将这些数据放到上下文中。

JSF 本身允许您以两种方式访问支持被激活行的数据。一种方式是使用 DataModel#getRowData() 方法检索该数据。另一种方法是从对应于临时循环变量的值绑定中读取该数据,该变量定义在组件标记的 var 属性中。在第二种情况下,在事件处理期间将再次向变量解析器公开临时循环变量(_course)。这两种访问形式最终都需要与 JSF API 进行交互。

如果选择 DataModel API 作为行数据入口点,那么必须将 DataModel 包装器对象公开为支持 bean 的属性,如 清单 4 所示。另一方面,如果选择通过值绑定访问行数据,则必须咨询 JSF 变量解析器。后一种方法还会将您与视图中使用的临时循环变量名称 _course 联系起来。

现在考虑 Seam 更抽象的获得所选数据的方法。Seam 允许您将针对 Seam 组件定义的 @DataModel 注释与 @DataModelSelection 补充注释配对。在回发期间,Seam 自动检测该配对。然后将 UIData 组件的当前行数据注入指派了 @DataModelSelection 注释的属性。该方法使支持 bean 与 JSF API 分离,因此使其返回 POJO 状态。

长期运行的对话

要确保回发时该课程列表仍然可用,并且不必重新从数据库中获取该列表,就能呈现下一个响应,则必须将当前的临时对话转变成长期运行的对话。

说服 Seam 将临时对话提升到长期运行对话的一种方式是设置一个方法,使其在执行过程中驻留 @Begin 注释。还必须将组件本身放到该 conversation 作用域中。通过在 CourseAction 类定义顶部添加 @Scope(ScopeType.CONVERSATION) 注释,就可以实现。使用长期运行的对话,允许变量保持作用域直至对话结束,而不仅仅是单个请求。对于 UIData 组件来说,这种跨多个请求的稳定性尤其重要。(请参阅 本系列第一篇文章 中关于有状态组件的讨论,了解数据不稳定可能对 UIData 组件的列队执行事件所造成的问题。)

您希望允许用户从课程目录中选择单个课程。要实现这项功能,在 h:commandLink 中包装各个课程的名称,h:commandLink 将方法绑定 #{courseAction.selectCourse} 指派成操作,如清单 9 所示。当用户单击其中一个链接时,就会触发对支持 bean 的 selectCourse() 方法的调用过程。由于 Seam 控制着注入过程,所以与该行有关的课程数据将自动分配给带有 @DataModelSelection 注释的属性。因此,不必执行任何查找,就能使用该属性,详细信息如清单 10 所示。

Seam - 无缝集成JSF,第2部分: 借助Seam进行对话(7)

时间:2011-06-25 IBM Dan Allen

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号