- 目的:在JSF2中可以使用Spring中的Bean,可以通过注解方式配置;
- 环境:在JSF2.2,Spring3.2.7版本测试通过;
- 配置过程概述:
整合过程主要包括一下三个方面的配置:
- web.xml配置:向Web容器中添加JSF和Spring的Listener等配置
- faces-config.xml配置:实现通过EL表达式和注解引用Spring Bean的支持
- ManagedBean配置:通过注解实现MBean中Spring Bean成员的配置
一、web.xml的配置
添加以下Spring 和JSF2相关内容:
<!-- spring启动监视器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!-- jsf额外需要的spring监视器 -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- JSF2.0的配置-->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<!-- JSF2.0的模式配置,开发模式下会在调试时报更加详细的错误-->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
二、faces-config.xml配置:
org.springframework.web.jsf.el.SpringBeanFacesELResolver
org.springframework.web.jsf.SpringBeanVariableResolver
在JSF的ManagedBean中通过注解引用Spring Bean,如:
@ManagedBean
@SessionScoped
public class UserEditMBean {
@ManagedProperty("#{userServiceImpl}") //spring的bean已经暴露给了jsf,可以由el表达式访问到的受管bean。在JSF页面上使用el表达式也可以直接访问到Spring Bean的方法,但不建议这样做。
private UserService userServiceImpl;
//MBean内容
}