1、为什么需要在JSF中使用Spring Bean
主要基于以下几点考虑
a)、用Spring作为容器管理Bean相当方便,且很容易和其它框架配合,例如hibernate,而jsf自己管理一套bean,和Spring Bean位于不同的容器当中,交互变得困难。
b)、JSF2.x已经支持通过注解(Annotation)方式设定Managed Bean,但是其Bean的注入不如Spring方便,必须要有set方法。
2、实现方式
a)、配置Spring,并配置包自动扫描
在web.xml中配置ContextLoaderListener
在Spring配置文件中配置包自动扫描<context:component-scan base-package="com.spbdev"/>
具体配置步骤从略。
b)、在jsf的配置文件(默认为faces-config.xml)中的faces-config/application节点下增加如下一行配置:
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
目的是让spring去解析EL expression, 因为以后所有的bean都会是spring bean而不是JSF的managed bean。JSF碰到#{},就会去问这个resolver,然后返回一个spring bean。如此一来,JSF里面,除了Navigation的东西,原来bean的内容就都可以使用了。
c)、按照正常方式编写和配置Spring Bean,并在jsf页面中直接使用即可