将JSF bean注入Spring bean - 不可能?

时间:2011-03-15 21:41:48

标签: spring jsf dependency-injection

我有一个JSF 2.0 bean:

@ManagedBean
@SessionScoped
public class LoginBean implements Serializable
{
    protected String name;

    public String getName()
    {
        return name;
    }

    //....
}

我有一个Spring 3.0 bean:

@Repository
public class Logins
{
    @ManagedProperty(value="#{loginBean}")
    protected LoginBean loginBean;

    public void recordLogin()
    {
         //... record in db that loginBean.getName() just logged in
    }
}

此代码不起作用,永远不会设置Logins.loginBean。

或者(同样的问题,简化) - 以下代码是否会起作用?

@Repository
public class SpringBean
{
    @ManagedProperty(value="#{session.id}")
    protected String id;

    //....
}

ContextLoaderListener和RequestLoaderListener在web.xml中声明。

是否可以将JSF bean注入Spring bean? (不使用另一个额外的框架)

或者我应该将我的JSF bean转换为Spring bean并使用faces-config.xml中的DelegatingVariableResolver技巧?我已经使用测试Spring bean测试了它,并且它可以工作。

1 个答案:

答案 0 :(得分:4)

在spring-managed bean中使用JSF注释不起作用。它不应该 - 你不应该从其他层的Web层注入东西。它应该是另一种方式 - 将弹簧服务(或存储库)注入Web组件(jsf托管bean),并在它们上调用方法,将托管bean属性作为参数传递