Spring bean注入JSF Managed Beans

时间:2011-05-31 20:05:00

标签: spring jsf configuration

问题描述:我注入的Spring bean被定义为JSF支持bean的托管属性,但没有被实例化。当我检索Managed-Bean时,它总是会变为null。

我一整天都在和这个斗争,似乎JSF Managed Bean不会从Spring读取applicationContext。我可以通过在一个支持bean中使用FacesContext来手动拔出bean,它会找到bean,但是当我尝试通过FacesConfig注入它时,它总是会出现null。我在下面列出了我如何整合它的步骤。有什么建议?

配置

Icefaces 1.85

JSF 1.2(通过冰面servlet)

Spring 3.0

Websphere 7.5(我认为这是eclipse 3.5)

Web.xml配置更改

Spring Context Loader Listener

    <listener>
    <display-name>SpringListener</display-name>
    <icon>
        <small-icon>small.gif</small-icon>
        <large-icon>large.gif</large-icon>
    </icon>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

上下文配置

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/SpringConfig/SpringHelloWorld.xml
    </param-value> 
</context-param>

FacesContext更改

可变解析器 - AKA胶水

<application><variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver></application>

Managed Bean

   <managed-bean>
    <managed-bean-name>testData</managed-bean-name>
    <managed-bean-class>src.test.TestData</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>spring3HelloWorldBean</property-name>
        <value>#{spring3HelloWorldBean}</value>
    </managed-property>
</managed-bean>

Spring.xml配置

<bean id="spring3HelloWorldBean" class="src.test.Spring3HelloWorld" />

提前致谢

2 个答案:

答案 0 :(得分:12)

首先,我认为你的问题是在1.1之后的所有JSF版本中不推荐使用DelegatingVariableResolver而你使用的是1.2,所以请使用以下配置。

<application> 
<el-resolver> 
org.springframework.web.jsf.el.SpringBeanFacesELResolver 
</el-resolver> 
</application>

希望它有所帮助。

答案 1 :(得分:4)

除了使用SpringBeanFacesELResolver之外,您还可以通过使用注释从spring中获益更多。因此,不要在xml中定义托管bean,只需执行:

@Controller
public class FooBean {
    @Inject
    private SpringService service;
    ....
}