可以将@ManagedBean作为@ManagedProperty注入@WebServlet吗?

在我的Java EE 6-webapp(运行在最新的GlassFish 3.1上)中,我使用JSF2-ManagedBeans和
@ManagedProperty
将它们注入到其他ManagedBeans中。现在我想知道我是否也可以使用
@ManagedProperty
@ManagedBean
注入
@WebServlet
。一些代码:
@WebServlet(name = "vdd")
public class VddServlet extends HttpServlet
{
  @ManagedProperty(value = "#{userIdentity}")
  private UserIdentity identity;
}
ManagedBean看起来像这样:
@ManagedBean
public class UserIdentity 
{
  ...
}
这样工作吗?如果没有,我有什么其他方法将ManagedBean注入WebServlet(没有CDI,目前不是一个选项 - 因为GF 3.1 B32 / 33与OSGi-Java EE-apps结合存在一些问题,但我们时间不长)?     
已邀请:
在servlet中使用
@ManagedProperty
是不可能的,因为它仅适用于
@ManagedBean
类。此外,注入一个范围小于父本身的对象也是不可能的,因为这也只会导致并发问题。注入器会为此抛出一个runtimeexception。 servlet本质上是应用程序作用域并在所有用户之间共享,你的
UserIdentity
bean似乎是会话作用域。 由于JSF在Servlet API之上运行并将会话范围的bean存储在会话中,因此您可以在servlet中将其作为会话属性获取:
UserIdentity identity = (UserIdentity) request.getSession().getAttribute("userIdentity");
请注意,
FacesContext
通常也不能在
FacesServlet
以外的servlet中使用,因此在注释中建议的servlet中使用
FacesContext
没有任何意义,只返回
null
。     

要回复问题请先登录注册