JSF与Spring的集成(转自 Silver Chariot)

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();

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值