JSF与Spring的集成(转自 Silver Chariot)
2007-08-17 18:03
260 查看
JSF与Spring的集成
参考出处: http://www.jroller.com/page/cagataycivici?entry=integrating_jsf_and_spring http://www.springframework.org/docs/api/org/springframework/web/jsf/package-summary.html
今天看了一篇叙述JSF与Spring framework结合的文章,其实Spring的org.springframework.web.jsf 包里正是包含三个类来支持JSF web层与位于Spring中间层(位于Spring根节点WebApplicationContext)相集成, 和通过JSF的EL表达式访问位于WebApplicationContext中的bean。
使用上述的包可以有两种不同的方法来访问Spring管理下的bean。一种是使用delegating resolver,另一种使用FacesContextUtils。
方法1)Delegating Resolver
假设在JSF的managed bean当中使用一个FacadeService来委派各个action的任务到业务层,而且FacadeService依赖于另一个服务“SomeService”实现了接口“ISomeService”。“SomeService” 是通过Spring来管理。那么先定义FacadeService:
package yourpackagename;
public class FacadeService {
private ISomeService someService;
public ISomeService getSomeService() {
return someService;
}
public void setSomeService(ISomeService someService) {
this.someService = someService;
}
}
然后在faces-config.xml中定义FacadeService:
<managed-bean>
<managed-bean-name>facadeService</managed-bean-name>
<managed-bean-class>
yourpackagename.FacadeService
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>someService</property-name>
<property-class>
packagename.ISomeService
</property-class>
<value>#{someService}</value>
</managed-property>
</managed-bean>
同时也要在faces-config.xml中定义delegating resolver,这里用spring的DelegatingVariableResolver来代替JSF默认的变量解析(variable resolver):
<code><variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver></code>
接下来定义spring bean xml让Spring来管理SomeService:
<code><bean id="someService" class="yourpackagename.SomeService"></bean></code>
以上就是所有需要配置的地方,最后仅仅需要把FacadeService加入到JSF后的代码里面:
protected FacadeService facadeService;
public FacadeService getFacadeService() {
if (facadeService == null) {
facadeService = (FacadeService) getFacesContext().getApplication()
.createValueBinding("#{facadeService}").getValue(getFacesContext());
}
return facadeService;
}
public void setFacadeService(FacadeService facadeService) {
this.facadeService = facadeService;
}
之后在任何jsf的code中访问spring中的bean就变为:
getFacadeService().getSomeService().someMethod();
这样就实现了JSF-Spring集成,Spring使用了inversion of control(IOC), 而facadeservice由Faces管理,以上全部都由spring的delegating variable resolver联系起来。
方法2)使用FacesContextUtils
FacesContextUtils是一个spring中的工具类,作用是便于获得一个给定的FacesContext中的根节点WebApplicationContext。
在spring配置xml中加入:
<bean id="someService" class="yourpackagename.SomeService"></bean>
在jsf应用的任何地方加入:
ISomeService someService = (ISomeService) FacesContextUtils
.getWebApplicationContext(FacesContext.getCurrentInstance())
.getBean("someService");
someService.someMethod();
参考出处: http://www.jroller.com/page/cagataycivici?entry=integrating_jsf_and_spring http://www.springframework.org/docs/api/org/springframework/web/jsf/package-summary.html
今天看了一篇叙述JSF与Spring framework结合的文章,其实Spring的org.springframework.web.jsf 包里正是包含三个类来支持JSF web层与位于Spring中间层(位于Spring根节点WebApplicationContext)相集成, 和通过JSF的EL表达式访问位于WebApplicationContext中的bean。
使用上述的包可以有两种不同的方法来访问Spring管理下的bean。一种是使用delegating resolver,另一种使用FacesContextUtils。
方法1)Delegating Resolver
假设在JSF的managed bean当中使用一个FacadeService来委派各个action的任务到业务层,而且FacadeService依赖于另一个服务“SomeService”实现了接口“ISomeService”。“SomeService” 是通过Spring来管理。那么先定义FacadeService:
package yourpackagename;
public class FacadeService {
private ISomeService someService;
public ISomeService getSomeService() {
return someService;
}
public void setSomeService(ISomeService someService) {
this.someService = someService;
}
}
然后在faces-config.xml中定义FacadeService:
<managed-bean>
<managed-bean-name>facadeService</managed-bean-name>
<managed-bean-class>
yourpackagename.FacadeService
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>someService</property-name>
<property-class>
packagename.ISomeService
</property-class>
<value>#{someService}</value>
</managed-property>
</managed-bean>
同时也要在faces-config.xml中定义delegating resolver,这里用spring的DelegatingVariableResolver来代替JSF默认的变量解析(variable resolver):
<code><variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver></code>
接下来定义spring bean xml让Spring来管理SomeService:
<code><bean id="someService" class="yourpackagename.SomeService"></bean></code>
以上就是所有需要配置的地方,最后仅仅需要把FacadeService加入到JSF后的代码里面:
protected FacadeService facadeService;
public FacadeService getFacadeService() {
if (facadeService == null) {
facadeService = (FacadeService) getFacesContext().getApplication()
.createValueBinding("#{facadeService}").getValue(getFacesContext());
}
return facadeService;
}
public void setFacadeService(FacadeService facadeService) {
this.facadeService = facadeService;
}
之后在任何jsf的code中访问spring中的bean就变为:
getFacadeService().getSomeService().someMethod();
这样就实现了JSF-Spring集成,Spring使用了inversion of control(IOC), 而facadeservice由Faces管理,以上全部都由spring的delegating variable resolver联系起来。
方法2)使用FacesContextUtils
FacesContextUtils是一个spring中的工具类,作用是便于获得一个给定的FacesContext中的根节点WebApplicationContext。
在spring配置xml中加入:
<bean id="someService" class="yourpackagename.SomeService"></bean>
在jsf应用的任何地方加入:
ISomeService someService = (ISomeService) FacesContextUtils
.getWebApplicationContext(FacesContext.getCurrentInstance())
.getBean("someService");
someService.someMethod();
相关文章推荐
- 将Spring与JSF集成
- JSF和Spring集成
- JSF和Spring的集成
- jsf、Spring、Hibernate 集成 faces-managed-beans.xml 配置
- 【第十章】集成其它Web框架 之 10.3 集成Struts2.x 集成JSF ——跟我学spring3
- jsf、Spring、Hibernate 集成 web.xml配置文件
- jsf+spring+hibernate集成
- JSF和Spring集成
- jsf、Spring、Hibernate 集成 applicationContext-hibernate.xml 配置
- 集成JSF和Spring
- JSF和Hibernate、Spring的集成开发
- 【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3
- JSF2.0与Spring3集成
- JSF-Spring 4.0两个框架集成--邵京国
- Spring 和JSF的集成的一种方式
- JSF和Spring的集成
- 关于Spring集成JSF是的问题
- Spring集成JSF的最简单方式是使用DelegatingVariableResolver类
- JSF和Spring集成
- 【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3