2013-06-28 185 views
3

可以將JSF託管Bean注入EJB嗎?我已經將JSF Managed Beans作爲@ManagedProperty注入到另一個JSF Managed Bean中。但是當我對EJB做同樣的事情時,我得到一個空點異常。將JSF託管Bean注入EJB

+1

你爲什麼要這麼做?什麼是你錯誤地認爲這是正確的解決方案的問題?反過來詢問並闡述具體的功能需求。 – BalusC

+0

我已經將業務邏輯錯誤地包含到JSF Managed Bean中。正如您所建議的那樣,我將重新考慮因素,以便EJB所需的JSF Managed Bean方法中的業務邏輯轉移到新的EJB。謝謝。但我怎麼能把這個作爲答案呢? –

回答

9

不,這是不可能的。 @ManagedProperty僅在@ManagedBean類(JSF託管的bean)內部工作。您只能使用@EJB@Inject注入另一個EJB或CDI管理的bean(@Named類)。

但是,它使得設計在技術上使諸如J​​SF或CDI託管bean之類的前端類在像EJB這樣的業務服務類中注入是沒有意義的。應該這樣設計一個EJB,它可以在不改變的情況下將它們重用到一個完全不同的前端,比如JAX-RS webservice,甚至是普通的vanilla servlet。一個EJB應該絕對沒有任何javax.faces.*導入/依賴(就像它不應該有任何javax.ws.rs.*javax.servlet.*那樣)。

如果您打算將數據從JSF託管bean傳遞給EJB,那麼只需將其作爲方法參數傳遞即可。這樣的數據通常具有JPA @Entity或至少返回實體的ID /關鍵字的味道。