`
yingfang05
  • 浏览: 123365 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JSF和Spring的集成之一

    博客分类:
  • jsf
阅读更多
JSF和Spring集成的资料比较少,原理是获得彼此的上下文引用,以此进一步获得各自管理的bean,这是可能的,因为两者是web应用框架都遵循servlet规范,为二者整合提供了可能和基础。
  在 Spring中ApplicationContext是相当重要的类,对于web应用,它还包装了 javax.servlet.ServletContext,为web应用提供了所有可以利用的数据,包括可管理bean,Faces中通过 FacesContext类可以获得所有可以利用的资源,同样包括JSF的可管理支持bean,它们都围绕着ServletContext提供了自己的门面,通过各自的门面在Servlet容器的世界里彼此相通。

  本文介绍两种方式,实现二者集成:

  1. 通过写自己的类来完成二者的连通,实际上只是获得彼此世界里存活的bean,对于JSF中事件处理可能需要更进一步的构思和编码,为了这点,第二个方法介绍了一种框架。

  2. 使用框架完成二者集成。

  一 自己动手,下面的代码以示例为主,其它涉及的类和接口略去。

  这个工具类提供在JSF世界里查找Spring管理的bean。也实现在Spring中查找JSF组件的方法。

package com.skysoft.rbac.dao;  
import org.springframework.context.ApplicationContext;  
import org.springframework.web.context.support.WebApplicationContextUtils;  
import javax.faces.context.FacesContext;  
import javax.servlet.ServletContext;  
import javax.faces.el.ValueBinding;  
import javax.faces.FactoryFinder;  
import javax.faces.application.Application;  
import javax.faces.application.ApplicationFactory;  
public final class SpringFacesUtil {  
public SpringFacesUtil() {  
}  
/**  
   * 从Spring中查找bean.  
   * @param beanname String  
   * @return Object  
   */  
public static Object findBean(String beanname) {  
    ServletContext context = (ServletContext) FacesContext.getCurrentInstance().  
        getExternalContext().getContext();  
    ApplicationContext appctx = WebApplicationContextUtils.  
        getRequiredWebApplicationContext(context);  
    return appctx.getBean(beanname);  
}  
/**  
   * 从JSF中查找bean.  
   * @param beanname String  
   * @return Object  
   */  
public static Object lookupBean(String beanname) {  
    Object obj = getValueBinding(getJsfEl(beanname)).getValue(FacesContext.  
        getCurrentInstance());  
    return obj;  
}  
private static ValueBinding getValueBinding(String el) {  
    return getApplication().createValueBinding(el);  
}  
private static Application getApplication() {  
    ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.  
        getFactory(FactoryFinder.APPLICATION_FACTORY);  
    //FactoryFinder.FACES_CONTEXT_FACTORY  
    //FactoryFinder.RENDER_KIT_FACTORY  
    return appFactory.getApplication();  
}  
private static String getJsfEl(String value) {  
    return "#{" + value + "}";  
}  
}

  下面定义一个由JSF管理的bean:

package com.skysoft.rbac.dao;  
   
import javax.servlet.ServletContext;  
import org.springframework.context.ApplicationContext;  
import org.springframework.web.context.support.WebApplicationContextUtils;  
import org.skysoft.struts.jsf.util.FacesUtils;  
public class ServiceLocatorBean  
    implements ServiceLocator {  
private static final String DAO_SERVICE_BEAN_NAME = "userDAO";  
//这个dao就是由Spring提供的管理bean,这个dao可以使用Hibernate实现.  
private UserDAO dao;  
public ServiceLocatorBean() {  
    this.dao = (UserDAO)SpringFacesUtil.findBean(DAO_SERVICE_BEAN_NAME);  
}  
public UserDAO getDao() {  
    return dao;  
}  


  下面是一个使用ServiceLocatorBean的类。

   public class UserDAOImp  
    extends HibernateDaoSupport implements UserDAO {  
private UserDAO dao;  
private List list;  
public UserDAOImp() {}  
public List getList() {  
    if (list == null) {  
      list = dao.getList();  
    }  
    return list;  
}  
public UserDAO getDao() {  
    return dao;  
}  
public void setDao(UserDAO dao) {  
    this.dao = dao;  
}  
}

  下面是一个使用ServiceLocatorBean的类:

public class UserDAOImp  
extends HibernateDaoSupport implements UserDAO {  
private UserDAO dao;  
private List list;  
public UserDAOImp() {}  
public List getList() {  
    if (list == null) {  
      list = dao.getList();  
    }  
    return list;  
}  
public UserDAO getDao() {  
    return dao;  
}  
public void setDao(UserDAO dao) {  
    this.dao = dao;  
}  
}

  在faces-config.xml中的配置:

<managed-bean>
<managed-bean-name>serviceLocatorBeanmanaged-bean-name>
<managed-bean-class>com.skysoft.rbac.dao.ServiceLocatorBeanmanaged-bean-class>
<managed-bean-scope>sessionmanaged-bean-scope>
managed-bean>
<managed-bean>
<managed-bean-name>Usermanaged-bean-name>
<managed-bean-class>com.skysoft.rbac.Usermanaged-bean-class>
<managed-bean-scope>requestmanaged-bean-scope>
<managed-property>
<property-name>serviceLocatorproperty-name>
<property-class>com.skysoft.rbac.dao.ServiceLocatorBeanproperty-class>
<value>#{serviceLocatorBean}value>
      </managed-property>
</managed-bean>

  在applicationContext.xml中的配置:

<bean id="userDAO" class="com.skysoft.rbac.dao.UserDAOImp">
      <property name="sessionFactory">
             <ref local="sessionFactory" />
      </property>
</bean>
分享到:
评论

相关推荐

    JSF和Spring集成.doc

    ### JSF与Spring集成知识点详解 #### 一、概述 **JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是...

    jsf+spring 实例

    通过这个实例,开发者可以学习如何在JBoss上搭建一个整合了JSF和Spring的Web应用,理解两者是如何协同工作的,以及如何处理前端交互和后端服务的通信。这将有助于提升Java Web开发的能力和实践经验。

    jsf+spring的jar包

    在JSF和Spring集成时,Spring可以作为JSF的后台服务层,处理业务逻辑和数据访问。通过Spring的JSF集成模块,如`spring-jsf.jar`(虽然这个文件不在当前列表中,但在实际集成中可能需要),可以使JSF和Spring之间的...

    JSF与Spring完美结合

    下面将详细介绍如何实现JSF与Spring的完美集成,以及在Tomcat6下部署运行一个猜数字游戏的示例。 首先,JSF是一种基于组件的MVC框架,它简化了创建用户界面的过程,通过预定义的UI组件和事件处理机制,开发者可以...

    jsf+hibernate+spring集成案例

    在这个"jsf+hibernate+spring集成案例"中,我们将看到: 1. **配置集成**:首先,我们需要在Spring配置文件中定义数据源、SessionFactory(Hibernate的核心组件)以及JSF所需的Managed Beans。这通常涉及到XML配置...

    JSF集成Spring_Framework和Hibernate开发应用实例

    【JSF集成Spring Framework和Hibernate开发应用实例】的详述 JavaServer Faces (JSF) 是一种基于MVC(Model-View-Controller)模式的Java EE应用程序用户界面框架,适用于构建复杂的Web应用。JSF提供了丰富的组件库...

    jsf-spring-boot-starter-2.2.6.zip

    【标题】"jsf-spring-boot-starter-2.2.6.zip" 是一个基于Java Server Faces (JSF) 和Spring Boot的启动器项目,版本为2.2.6。这个压缩包通常包含了用于快速搭建JSF应用在Spring Boot环境中的必要组件和配置。 ...

    jsf-spring-4.0.3

    标题"jsf-spring-4.0.3"表明这是一个关于JSF与Spring整合的特定版本,4.0.3可能指的是Spring框架的一个版本,这通常意味着该资源包含了使得这两个框架能够协同工作的配置和示例代码。 在描述中提到的"jsf他spring...

    JSF+Spring+Hibernate的实例讲解.doc

    总之,JSF、Spring 和 Hibernate 的集成提供了强大的 Web 应用开发能力,涵盖了用户界面、业务逻辑和数据持久化的全方面需求。通过深入理解和实践这些技术,开发者可以构建出高效、可维护的大型企业级应用。如果你对...

    jSF2.0与Spring整合实例+教程

    整合教程通常会涵盖这些步骤,指导开发者如何设置环境、配置Spring和JSF、创建并集成Managed Beans,以及处理页面事件和业务逻辑。通过学习这些教程,开发者可以有效地结合两者的优点,构建出高效、灵活且易于维护的...

    JSF集成Spring、Hibernate

    在描述中提到的 **jar包完整版** 指的是为了运行JSF、Spring和Hibernate集成的项目,需要包含所有相关的库文件,如JSF的实现库、Spring的核心库、Hibernate的JAR文件,以及可能需要的其他依赖,如JDBC驱动(对于连接...

    JSF+Spring+Hibernate(框架整合)详细过程

    1. **配置Spring**:首先,我们需要在Spring配置文件中定义Bean,包括JSF Managed Beans和Hibernate Session Factory。Bean的定义可以是XML配置或基于注解的方式。 2. **JSF与Spring的整合**:为了使JSF能够使用...

    jsf+springdatajpa

    在现代Web开发中,JavaServer Faces (JSF)、Spring Data JPA 和 MySQL 的组合是一种常见且强大的技术栈,用于创建数据驱动的Web应用程序。这些技术分别处理用户界面、数据访问和持久化以及关系型数据库管理,共同...

    jsf-spring:JSF 和 Spring 集成

    JSF 和 Spring 集成 本实验展示了如何设置 JSF 了解 Spring 组件以使用 Spring 依赖注入。 它是用 Maven 构建的,它使这个项目与 IDE 无关。 因此,构建和运行它很简单: mvn 全新安装 mvn码头:运行 然后,在某个 ...

    jsf+spring+hibernate

    总结来说,"jsf+spring+hibernate" 的组合为开发者提供了一个强大而灵活的框架,能够有效地处理复杂的 Web 应用场景,包括用户认证、数据操作和业务流程控制。通过合理的设计和配置,可以构建出高效、可扩展的应用...

    jsf+spring 的 配置文件

    在Java世界中,JSF(JavaServer Faces)和Spring框架是两种常见的技术,它们分别用于构建用户界面和处理业务逻辑。JSF是一个用于构建MVC(Model-View-Controller)结构Web应用程序的Java标准,而Spring则是一个全面...

    JSF第一步--JSF+Spring+ Hibernate+AJAX编程实践 试读

    在"JSF第一步--JSF+Spring+Hibernate+AJAX编程实践 试读"这本书中,读者可以期待学习如何设置这些技术的集成环境,创建JSF组件,配置Spring容器,理解Hibernate的映射和查询机制,以及如何在JSF中使用AJAX进行异步...

    JSF SPRING

    jsf与spring的集成的几种方式,以及jsf的一些技术

Global site tag (gtag.js) - Google Analytics