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,大功告成
相关推荐
2. **配置JSF**:为了使JSF能够与Spring协作,需要在JSF的配置文件(如`faces-config.xml`)中添加Spring的JSF监听器`org.springframework.web.jsf.FacesContextListener`,这样JSF就能识别到Spring的Bean。...
5. `.springBeans`:可能包含了Spring框架的bean定义,描述了应用程序的对象及其依赖关系。 6. `README.txt`:通常包含项目的基本信息、安装指南或使用说明。 7. `project.xml`:可能是项目配置文件,描述了项目的...
2. **配置Spring**:编写Spring的配置文件,定义bean并注入到JSF的Managed Beans中。 3. **配置JSF**:在faces-config.xml中设置Spring为Bean管理器。 4. **使用Spring的Service层**:在JSF的Managed Beans中注入...
- 配置JSF:在JSF的配置文件中(如`faces-config.xml`)声明Spring的EL解析器,使得JSF能够识别和使用Spring Bean。 - 使用JSF页面调用Spring服务:在JSF的XHTML页面中,通过EL表达式直接引用Spring Bean的方法。 *...
同时,还需要配置JSF与Spring的适配器,如`org.springframework.web.jsf.FacesContextUtils`,使得JSF能够识别和使用Spring的Bean。 2. **JSF Managed Beans**:JSF中的Managed Bean是应用程序的主要组件,它们负责...
- **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的SQL映射、JSF的组件和Managed Bean等。这种整合提供了强大的后端处理能力,同时也简化了前端界面的开发。通过合理...
- 这个类的主要功能是在 JSF 世界中查找 Spring 管理的 bean,同时也实现了在 Spring 中查找 JSF 组件的方法。 - `findBean(String beanName)` 方法用于从 Spring 中查找 bean,该方法通过当前 `FacesContext` ...
5. **整合**:通过Spring的JSF集成库(如spring-jsf),将JSF的Managed Bean与Spring的bean关联起来,实现依赖注入。 6. **编写业务逻辑**:在Service层实现业务逻辑,调用DAO进行数据操作,确保事务的正确性。 7. *...
2. ** faces-config.xml 配置**:在JSF配置文件中声明Spring Bean的查找机制,通常使用`<managed-bean>`的`class`属性引用Spring Bean。 3. **Spring-WSF Bridge**:如`SpringFaces`库,用于协调JSF和Spring之间的...
在实际项目中,开发者通常会根据具体需求选择合适的集成方式,例如使用Spring的`DelegatingVariableResolver`实现JSF EL表达式对Spring Bean的访问,或者通过`ManagedProperty`注解将Spring Bean注入到JSF Managed ...
2. **JSF与Spring的整合**:为了使JSF能够使用Spring的Bean,我们需要添加`spring-jsf`库,并配置JSF的` faces-config.xml`,将Spring作为JSF的Managed Bean提供者。这样,JSF可以通过Spring的ApplicationContext...
这三个框架的集成,通常会通过Spring的Context配置文件来完成,配置JSF的Managed Beans、Spring的Bean以及Mybatis的SqlSessionFactory等关键组件。在实际应用中,JSF负责展示层,处理用户的请求和响应;Spring作为...
`commons-beanutils.jar`和`commons-collections.jar`是Apache Commons项目下的两个库,它们提供了许多实用的工具类,用于Bean操作和集合处理,这些在JSF和Spring的开发中都很常见。 `commons-digester-2.0.jar`是...
通过配置,可以让JSF2的Managed Bean自动从Spring容器中获取,实现依赖注入。 3. **数据绑定**:JSF2的EL表达式可以直接引用Spring Beans中的属性,实现视图与模型的数据绑定。 4. **服务层和持久层的整合**:...
2. **集成 Spring**:通过在 JSF 的 Managed Beans 中注入 Spring 的 Bean,可以利用 Spring 的依赖注入特性。这需要配置 Spring 的上下文文件,声明 Bean 及其依赖,并启用 JSF-Spring 桥接器。 3. **整合 ...
- **培训课程**:提供定制化的Java EE培训课程,包括Servlets、JSP、Struts、JSF/MyFaces/Facelets、Ajax、GWT、Spring、Hibernate/JPA等,由知名作者和开发者亲自授课。 ### 结论 通过对JSF Managed Beans的深入...