2011-03-15 42 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