`
kevinkevin1979
  • 浏览: 18362 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Jsf与Spring的整合原理

阅读更多
Jsf做为Web框架,Spring做为业务层框架,两者可以结合起来用。只要在faces-config.xml中做一个很简单的配置:

<faces-config>
  <application>
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    ...
  </application>
</faces-config>

理解这个配置,就需要接触到Java平台中一个常用的概念:Resolver。它的意思是“解决者”。遇到一个陌生的东西,怎么
处理就需要找相应的Resolver。比如在一个视图文件jsp中,有这么一行:

<h:outputText value="#{welcome.hello}"/>

其中welcome是注册在Spring中的一个组件,并没有注册成Jsf的managed bean。当解析到#{welcome.hello}时候,Jsf框架去
找注册的managed bean,当然它会找不到,系统在这个位置不会有任何显示。而当我们加上上面的el-resolver时,Jsf框架会
在Spring框架中找。

当然你也可以在managed bean配置中注入Spring管理的bean,例如:
   <managed-property>
      <property-name>welcome</property-name>
      <property-class>guessNumber.Welcome</property-class>
      <value>#{welcome}</value>
    </managed-property>

Jsf框架读取这个配置文件,也会到Spring中找到名字为“welcome”的bean.

Jsf寻找的过程是一个职责链模式,它从一系列的Resolver中寻找需要的东西,一旦找到,即返回。这个链是有顺序的,这个
顺序在Jsf Spec中有清晰的定义。比如有两个不同bean, 一个注册在Sping中,另一个注册在Jsf中,你不小心给了相同的名字,
它会先去Sping中找,最终Spring中注册的bean起了作用。

打开SpringBeanFacesELResolver源代码,我们可以看到它最终继承了一个抽线类:ELResolver。这个类中的方法都有一个参数
ELContext,从ELContext中顺藤摸瓜得到servletContext,然后取出名字为
"org.springframework.web.context.WebApplicationContext.ROOT"
的变量,此变量即为Sping中的WebApplicationContext,有了这个,万事大吉,我们可以从中取出所有注册过的bean.
那么又是谁把这个变量放到
servletContext中了呢,当然是
"org.springframework.web.context.ContextLoaderListener"了。
分享到:
评论
1 楼 on-the-way 2010-12-19  
  最近我也在学习jsf  感觉你的文章不错哈 

相关推荐

    JSF 和 Spring 集成

    JSF和Spring集成的资料比较少,原理是获得彼此的上下文引用,以此进一步获得各自管理的bean,这是可能的,因为两者是web应用框架都遵循servlet规范,为二者整合提供了可能和基础.

    Spring攻略(第二版 中文高清版).part1

    7.5 将Spring Web Flow与JSF集成 267 7.5.1 问题 267 7.5.2 解决方案 267 7.5.3 工作原理 267 7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 ...

    Spring攻略(第二版 中文高清版).part2

    7.5 将Spring Web Flow与JSF集成 267 7.5.1 问题 267 7.5.2 解决方案 267 7.5.3 工作原理 267 7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...

    Spring中文帮助文档

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    Spring API

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.2.2. 工作原理........................................................................................................................................................... 26 1.3. Seam 中的可点击列表:...

    JAVA程序开发大全---上半部分

    10.7.2 反向工程生成Spring整合Hibernate的DAO 184 10.7.3 Spring实现事务自动提交 188 10.8 基于Spring与Struts、Hibernate整合的登录系统 194 10.9 本章小结 199 第11章 JSF框架的开发与应用 200 11.1 JSF框架概述...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    整理后java开发全套达内学习笔记(含练习)

    cohesion 内聚,黏聚,结合 [kәu'hi:ʒәn] (a class is designed with a single, well-focoused purpose. 应该不止这点) command n. 命令,指令 [kә'mɑ:nd](指挥, 控制) (command-line 命令行) Comments [java]...

Global site tag (gtag.js) - Google Analytics