2011-03-15 56 views
1

我有一个JSF 2.0豆:将JSF bean注入Spring 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测试过了,它可以工作。

回答

4

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

+0

谢谢,这证实了我已经怀疑谷歌搜索一个小时没有成功:)我最初的想法是将LoginBean转换为Spring bean,但是你没有注意到从Web层注入是正确的。所以我会将Spring的“登录”注入到JSF“LoginBean”中。 – 2011-03-15 22:18:16