快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
/variable-resolver>

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

时间:2011-06-25 IBM Dan Allen

Seam 的上下文组件

为了体现本文的目的,我假设基于 Spring 的服务层是不证自明的。除了 JSF-Spring 集成层之外 —— 该层负责向 JSF 公开 Spring bean (因此也向 Seam 公开该 bean),并没有深入地使用 Spring。服务层对象将作为无状态的接口对待,CRUD 操作可以委托给该接口。解决这些应用程序细节之后,就可以自由地重点研究 Seam 如何将托管 bean 转换成有状态的组件,这些组件明确其在促进用户与应用程序交互方面的角色。

通过创建名为 courseAction 的支持 bean 来支持管理高尔夫课程目录的视图,就开始开发 Open 18 应用程序。该托管 bean 公开一个高尔夫课程对象集合,然后对管理这些实例的操作做出响应。这些数据的持久化委托给基于 Spring 的服务层。

在典型的 JSF 应用程序中,使用托管 bean 工具来注册 CourseAction bean,然后借助其委托对象(或 “依赖项”)注入该 bean。为此,必须打开 faces-config.xml 文件,然后使用该 bean 的名称和类添加新的 managed-bean 节点,如清单 2 所示。通过使用值绑定表达式添加引用其他托管 bean 的子 managed-property 节点,指定要向该类的属性中注入的依赖项。在这个例子中,惟一的依赖项是无状态的服务对象 courseManager,它是使用来自 Appfuse 项目的 GenericManager 类实现的(请参见 参考资料)。

清单 2. 作为 JDF 托管 bean 定义的 CourseAction

<managed-bean>  <managed-bean-name>courseAction</managed-bean-name>  <managed-bean-class>com.ibm.dw.open18.CourseAction</managed-bean-class>  <managed-property>   <property-name>courseManager</property-name>   <value>#{courseManager}</value>  </managed-property> </managed-bean>

注释简化了 XML!

现在您想起了使用本地 JSF 方法定义托管 bean 有多麻烦,请忘记曾经看到 managed-bean XML 声明 —— 因为您不再需要它了!在 Seam 构建的应用程序中,bean 仅仅是使用 Java 5 注释声明的。Seam 将这些 bean 称为上下文组件。尽管您可能觉得该术语很深奥,但是它只是描述一个组件(或命名实例)与给定的作用域(或称为上下文)有关。

Seam 在为上下文组件分配的作用域的生命期内对该组件进行管理。 Seam 组件更像 Spring bean,而不是 JSF 托管 bean,这是因为它们插入到复杂的、面向方面的框架。在功能方面,Seam 框架远胜于 JSF 的基本控制反转 (IOC) 容器。观察清单 3 中 courseAction 的声明。CourseAction 类被重构为利用 Seam 的注释。

清单 3. 作为 Seam 组件定义的 CourseAction

@Name("courseAction") public class CourseAction {   @In("#{courseManager}")   private GenericManager<Course, Long> courseManager; }

注意所有 XML 语句都被去掉了!总之,这就是 Seam 注释的美妙之处。类的 @Name 注释指导 Seam 的变量解析器处理名称与注释中的值相匹配的变量请求。然后 Seam 实例化这个类的实例,注入 @In 注释指派的任何依赖项,然后假借该变量名公开该实例。使用清单 3 作为示例,Seam 创建了 CourseAction 类实例,将 courseManager Spring bean 注入courseManager 属性,然后在收到对变量 courseAction 的请求时返回该实例。额外的好处是,该 bean 的配置接近于代码,因此对继承代码库的新开发人员来说更加透明(甚至对于您这样只学了 6 个月的人来说也是如此)。

@In 注释告知 Seam 将绑定表达式 #{course

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号