JSF与Spring的整合原理

该文章转自iteye博客的kevinkevin1979

他的这篇文章写得挺好的,理解也挺到位,所以抄过来自己存储以便复习。

最近在学习JSF框架,还没有弄明白JSF中请求路径的处理,和页面与后台之间的参数传递。


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"了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Spring Boot整合JSF,你可以按照以下步骤进行操作: 1. 添加JSF依赖:在pom.xml文件中,添加JSF的依赖项,如下所示: ```xml <dependency> <groupId>javax.faces</groupId> <artifactId>javax.faces-api</artifactId> <version>2.3</version> </dependency> ``` 2. 配置JSF Servlet:在Spring Boot的配置类中,添加以下配置,以将JSF Servlet映射到`/javax.faces`路径下: ```java import javax.faces.webapp.FacesServlet; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JsfConfig { @Bean public ServletRegistrationBean<FacesServlet> facesServletRegistration() { ServletRegistrationBean<FacesServlet> registration = new ServletRegistrationBean<>(new FacesServlet(), "*.jsf"); registration.setName("FacesServlet"); return registration; } } ``` 3. 配置JSF View Resolver:在Spring Boot的配置类中,添加以下配置,以将JSF视图解析为`.xhtml`文件: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class JsfConfig { @Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setViewClass(JsfView.class); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".xhtml"); return resolver; } } ``` 4. 创建JSF视图:在`/WEB-INF/views/`目录下创建JSF视图文件,例如`hello.xhtml`,并在其中定义JSF组件。 现在,你已经成功地将Spring Boot与JSF整合起来了。你可以在JSF视图中使用JSF标签和组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值