`
xinanadu
  • 浏览: 228326 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring jsf bean

 
阅读更多

JSF和Spring都实现了依赖注入,通过将依赖对象注入到Pojo中去,从而实现了对象间的解耦。一般说来有四种方式整合JSF和Spring
1.使用Spring的WebApplicationContextUtils
通过Spring的WebApplicationContextUtils工具类,在ServletContext中获取ApplicationContext,通过这种方式来得到Spring Bean。
这种方式可以实现,但并不是最优方案,因为JSF的pojo明显的与Spring偶合起来了,是比较糟糕的实现。
2.通过为JSF实现一个祖先Pojo,专门处理ApplicationContext
专门做一个祖先Pojo,里面只用来通过WebApplicationContextUtils获取ApplicationContext,别的什么都不干,然后其它的Pojo从这个祖先类继承。

这种方式算是第一种方式的变种,较前一种方案稍微好了一点,但这样一来,每次增加Page都需要手工调整对应的java类的代码,稍微有点麻烦。

3.使用JSF-Spring.jar
JSF-Spring.jar是专门用来让JSF和Spring整合的,使用它可以解决JSF和Spring偶合的问题,方案比较不错,不过这个jar包只要加入netbeans工程,Visual JSF 设计器就打不开了。所以在Netbeans上基本上没法用。

4.使用Spring自带的VariableResolver
这个方案是最优方案,在Netbeans中实现起来没有任何问题,而且也实现了JSF和Spring之间的解耦。
实现步骤简述如下
4.1.加入spring包
4.2.修改web.xml
增加如下内容

    <context-param>
        <!--spring配置文件-->
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>    
    <listener>
        <!--spring的上下文加载器Listener,用来创建ApplicationContext的-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

4.3. 修改faces-config.xml
在其中增加如下内容

    <application>
       <variable-resolver>
           <!--org.springframework.web.jsf.DelegatingVariableResolver 使用这个也可以-->
          org.springframework.web.jsf.SpringBeanVariableResolver
       </variable-resolver>
    </application>

4.4. 增加spring bean


DemoManager.java 代码如下
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.runz.demo.manager;

/**
 *
 * @author jim
 */
public interface DemoManager {
    public String getMessage();
}

DemoManagerImpl.java 代码如下

package com.runz.demo.manager.impl;

import com.runz.demo.manager.DemoManager;

/**
 *
 * @author jim
 */
public class DemoManagerImpl implements DemoManager {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

4.5. 修改applicationContext.xml
增加Bean的定义


    <bean id="demoManager" class="com.runz.demo.manager.impl.DemoManagerImpl">
        <property name="message" value="这是来自spring注入的消息,你看到了没有?"></property>
    </bean>


4.6. 设计JSF页面
在页面上拖转一个名为lblMessage的标签和一个名为btnShowMessage的按钮,双击按钮生成代码如下

    public String btnShowMessage_action() {
        // 待做事项:处理操作。返回的值是一个导航
        // 如果名称为 null,则返回到同一页。
    }

4.7. 修改Page1.java文件
接下来就需要未Page1增加一个DemoManager字段并增加其Setter方法。然后在按钮的单击事件里填写代码。

package com.runz.faces;

import com.runz.demo.manager.DemoManager;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Body;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.Form;
import com.sun.webui.jsf.component.Head;
import com.sun.webui.jsf.component.Html;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.Link;
import com.sun.webui.jsf.component.Page;
import javax.faces.FacesException;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author jim
 */
public class Page1 extends AbstractPageBean {

    private DemoManager demoManager;

......

    //JSF的注入方法

    public void setDemoManager(DemoManager demoManager) {
        this.demoManager = demoManager;
    }


    //这是对应的按钮事件
    public String btnShowMessage_action() {
        // 待做事项:处理操作。返回的值是一个导航
        // 如果名称为 null,则返回到同一页。

        this.getLblMessage().setText(this.demoManager.getMessage());

        return null;
    }
}

4.8. 修改faces-config.xml中关于Page1的Manage bean的声明部分

    <managed-bean>
        <managed-bean-name>Page1</managed-bean-name>
        <managed-bean-class>com.runz.faces.Page1</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>

        <managed-property>
           <property-name>demoManager</property-name>
           <value>#{demoManager}</value>
        </managed-property>

    </managed-bean>

上面黑体字部分就是JSF的注入声明,#{变量名}的方式通过VariableResolver对象在Spring的ApplicationContext中检索同名Bean,找到后就注入倒JSF的Bean中去。

ok,大功告成

分享到:
评论

相关推荐

    JSF 和 Spring 集成

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

    整合jsf hibernate spring实例

    部门人员一对多的CRUD操作 hibernate: 管理实体关系映射 spring:数据源配置与获得session IOC依赖注入 和 AOP ...jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    5.4.2 使用托管bean作为JSF页面的支撑bean 第6章 导航模型 6.1 使用隐式导航 6.2 JSF导航系统概述 6.2.1 回顾MVC-控制器 6.2.2 Navigation HandleI-幕后主管 6.2.3 Faces动作方法说明 6.3 构建导航规则 6.3.1 静态...

    spring jar 包详解

    (11) spring-web.jar 这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、 Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) ...

    JSF2.0快速入门的基本教程.ppt

    页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的...

    Spring in Action(第二版 中文高清版).part2

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    Spring in Action(第二版 中文高清版).part1

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    Spring in Action(第2版)中文版

    16.4.3在jsf页面中使用springbean 16.4.4在jsf中暴露应用程序环境 16.5spring中带有dwr的支持ajax的应用程序 16.5.1直接web远程控制 16.5.2访问spring管理的beandwr 16.6小结 附录a装配spring a.1下载spring ...

    酒店预订管理系统

    (1)JSF和Spring的集成配置:将JSF作为前端,Spring做为中间层使用,使得应用的架构更加清晰、合理,并且集成之后,在JSF中可以很方便的使用到Spring的受管Bean了。详见Spring和JSF集成配置文件。 (2)JdbcTemplate的...

    跟我学spring3(8-13)

    【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3 【第十一章】 SSH集成开发积分商城 之 11.1 概述 ——跟我学spring3 【第十一章】 SSH集成开发积分商城 之 11.2 实现通用层 ——跟我学spring3 【第十...

    jboss as 7 support jsf2.2.1 modules

    Faces Flow的灵感来自ADF “任务流(Task Flows)”和Spring“页面流(Web Flow)”。它提供了对流的直接支持。流被定义为节点间的流转,可以引导用户浏览一组页面和一些相关用例。节点可以是: “一个视图(A ...

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

    spring4.3.9相关jar包

    spring-web.jar(必须) :这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar  这个...

    开源框架 Spring Gossip

    第一个 Struts 程式 在 Struts 中整合 Spring 第一个 JSF 程式 在 JSF 中整合 Spring &lt;br&gt; 其它 Spring 提供了简化且一致的方式,让您在使用一些 API 或服务时更加简单。 远程...

    jsf学习资料2

    jsf关于整合spring及初始化bean方面的学习资料

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

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

    最新最全的spring开发包

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...

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

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    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 ...

Global site tag (gtag.js) - Google Analytics