将JSF托管Bean注入EJB

将JSF托管Bean注入EJB,jsf,jakarta-ee,ejb,Jsf,Jakarta Ee,Ejb,可以将JSF托管Bean注入EJB吗?我已经将JSF托管Bean作为@ManagedProperty注入到另一个JSF托管Bean中。但是当我对EJB做同样的操作时,我会得到一个空点异常。不,这是不可能的。@ManagedProperty仅在@ManagedBean类(JSF托管bean)中工作。您只能使用@EJB或@Inject注入另一个EJB或CDI管理的bean(名为@的类) 然而,将前端类(如JSF或CDI管理的bean)注入到业务服务类(如EJB)中在技术上是没有意义的。EJB的设计应

可以将JSF托管Bean注入EJB吗?我已经将JSF托管Bean作为@ManagedProperty注入到另一个JSF托管Bean中。但是当我对EJB做同样的操作时,我会得到一个空点异常。

不,这是不可能的。
@ManagedProperty
仅在
@ManagedBean
类(JSF托管bean)中工作。您只能使用
@EJB
@Inject
注入另一个EJB或CDI管理的bean(名为
@的
类)

然而,将前端类(如JSF或CDI管理的bean)注入到业务服务类(如EJB)中在技术上是没有意义的。EJB的设计应确保它可以在不做任何更改的情况下,一起重用一个完全不同的前端,比如JAX-RSWebService,甚至是一个普通的servlet。EJB绝对不应该有任何
javax.faces.*
imports/dependency(就像它不应该有任何
javax.ws.rs.*
javax.servlet.
one)


如果您打算将数据从JSF托管bean传递到EJB,那么只需将其作为方法参数传递即可。这些数据通常是JPA
@实体的风格,或者至少是返回实体的ID/关键字。

为什么要这样做?您错误地认为这是正确解决方案的问题到底是什么?而是询问并详细说明具体的功能需求。我错误地将业务逻辑包含到JSF管理的Bean中。正如您所建议的,我将重新考虑,以便将EJB所需的JSF托管Bean方法中的业务逻辑转移到新的EJB中。非常感谢。但我怎么能接受这个答案呢?