转载请注明出处(Cooper的专栏 http://blog.youkuaiyun.com/cooper_lyt)
由于JSF和Spring都支持IOC(依赖注入或反转控制) 所以JSF和Spring的融合还是很简单。可能有人会问即然JSF都支持IOC那么为什么还要用Spring呢,有以下几个原因:
1.从分层上来说Spring是业务层,主要用来写业务逻辑,而JSF是表示层,主要用来写显示逻辑,所以还是分开的好。
2.从IOC的功能来说Spring 中所有的Bean都是一个单件模式,也说是说所有的Bean只有一份而且生命周期也比较长,而JSF的IOC只是在由用户访问时才实例化(生命周期的范围可以设置),所以不符合我们写业务逻辑的要求
3.从功能上来说Spring不仅提供了IOC功能,还提供了AOP、声明式事务等JSF 所没有而我们的项目所需要的功能。
要让JSF使用Spring的业务逻辑方法如下
1.在JSF的配置文件faces-config.xml中添加以下代码(message部分是JSF的国际化,可以参考我于与jsf的文章):
- <application>
- <variable-resolver>
- org.springframework.web.jsf.DelegatingVariableResolver
- </variable-resolver>
- <message-bundle>messages</message-bundle>
- <locale-config>
- <default-locale>en</default-locale>
- <supported-locale>zh_CN</supported-locale>
- <supported-locale>en_US</supported-locale>
- </locale-config>
- <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
- </application>
2.在JSF的配置文件faces-config.xml中引用Spring的业务Bean:(其中worksMgrImpl和worksImpl是在Spring中声明的业务Bean)
- <managed-bean>
- <managed-bean-name>mainBean</managed-bean-name>
- <managed-bean-class>
- com.dgsoft.fc.jsf.backBean.MainBean
- </managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- <managed-property>
- <property-name>works</property-name>
- <value>#{worksImpl}</value>
- </managed-property>
- <managed-property>
- <property-name>workMgr</property-name>
- <value>#{worksMgrImpl}</value>
- </managed-property>
- </managed-bean>