`
xinanadu
  • 浏览: 231468 次
  • 性别: 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完美结合

    2. **配置JSF**:为了使JSF能够与Spring协作,需要在JSF的配置文件(如`faces-config.xml`)中添加Spring的JSF监听器`org.springframework.web.jsf.FacesContextListener`,这样JSF就能识别到Spring的Bean。...

    spring-hr.zip_hr_hr java_spring_spring jsf

    5. `.springBeans`:可能包含了Spring框架的bean定义,描述了应用程序的对象及其依赖关系。 6. `README.txt`:通常包含项目的基本信息、安装指南或使用说明。 7. `project.xml`:可能是项目配置文件,描述了项目的...

    jsf+spring整合

    2. **配置Spring**:编写Spring的配置文件,定义bean并注入到JSF的Managed Beans中。 3. **配置JSF**:在faces-config.xml中设置Spring为Bean管理器。 4. **使用Spring的Service层**:在JSF的Managed Beans中注入...

    jsf+spring 实例

    - 配置JSF:在JSF的配置文件中(如`faces-config.xml`)声明Spring的EL解析器,使得JSF能够识别和使用Spring Bean。 - 使用JSF页面调用Spring服务:在JSF的XHTML页面中,通过EL表达式直接引用Spring Bean的方法。 *...

    jsf+spring 的 配置文件

    同时,还需要配置JSF与Spring的适配器,如`org.springframework.web.jsf.FacesContextUtils`,使得JSF能够识别和使用Spring的Bean。 2. **JSF Managed Beans**:JSF中的Managed Bean是应用程序的主要组件,它们负责...

    spring+jsf

    - **Spring Managed Beans in JSF**:JSF可以使用Spring管理的Bean,通过`@ManagedProperty`注解引用Spring Bean。 - **JSF Managed Beans in Spring**:同样,Spring也可以使用JSF的Managed Beans,通常通过`...

    Spring-Mybatis-JSF

    总结来说,Spring-Mybatis-JSF的整合涉及到多个层面的配置和集成,包括Spring的依赖注入、Mybatis的SQL映射、JSF的组件和Managed Bean等。这种整合提供了强大的后端处理能力,同时也简化了前端界面的开发。通过合理...

    JSF和Spring集成.doc

    - 这个类的主要功能是在 JSF 世界中查找 Spring 管理的 bean,同时也实现了在 Spring 中查找 JSF 组件的方法。 - `findBean(String beanName)` 方法用于从 Spring 中查找 bean,该方法通过当前 `FacesContext` ...

    JSF+Spring+Hibernate小例子

    5. **整合**:通过Spring的JSF集成库(如spring-jsf),将JSF的Managed Bean与Spring的bean关联起来,实现依赖注入。 6. **编写业务逻辑**:在Service层实现业务逻辑,调用DAO进行数据操作,确保事务的正确性。 7. *...

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

    2. ** faces-config.xml 配置**:在JSF配置文件中声明Spring Bean的查找机制,通常使用`&lt;managed-bean&gt;`的`class`属性引用Spring Bean。 3. **Spring-WSF Bridge**:如`SpringFaces`库,用于协调JSF和Spring之间的...

    jsf-spring-4.0.3

    在实际项目中,开发者通常会根据具体需求选择合适的集成方式,例如使用Spring的`DelegatingVariableResolver`实现JSF EL表达式对Spring Bean的访问,或者通过`ManagedProperty`注解将Spring Bean注入到JSF Managed ...

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

    2. **JSF与Spring的整合**:为了使JSF能够使用Spring的Bean,我们需要添加`spring-jsf`库,并配置JSF的` faces-config.xml`,将Spring作为JSF的Managed Bean提供者。这样,JSF可以通过Spring的ApplicationContext...

    jsf1.2+Spring3.0.5+Mybatis

    这三个框架的集成,通常会通过Spring的Context配置文件来完成,配置JSF的Managed Beans、Spring的Bean以及Mybatis的SqlSessionFactory等关键组件。在实际应用中,JSF负责展示层,处理用户的请求和响应;Spring作为...

    jsf+spring的jar包

    `commons-beanutils.jar`和`commons-collections.jar`是Apache Commons项目下的两个库,它们提供了许多实用的工具类,用于Bean操作和集合处理,这些在JSF和Spring的开发中都很常见。 `commons-digester-2.0.jar`是...

    jsf2+spring sample

    通过配置,可以让JSF2的Managed Bean自动从Spring容器中获取,实现依赖注入。 3. **数据绑定**:JSF2的EL表达式可以直接引用Spring Beans中的属性,实现视图与模型的数据绑定。 4. **服务层和持久层的整合**:...

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

    2. **集成 Spring**:通过在 JSF 的 Managed Beans 中注入 Spring 的 Bean,可以利用 Spring 的依赖注入特性。这需要配置 Spring 的上下文文件,声明 Bean 及其依赖,并启用 JSF-Spring 桥接器。 3. **整合 ...

    JSF 资源 managed bean 课件

    - **培训课程**:提供定制化的Java EE培训课程,包括Servlets、JSP、Struts、JSF/MyFaces/Facelets、Ajax、GWT、Spring、Hibernate/JPA等,由知名作者和开发者亲自授课。 ### 结论 通过对JSF Managed Beans的深入...

Global site tag (gtag.js) - Google Analytics