gpt4 book ai didi

java - 可以将@ManagedBean 作为@ManagedProperty 注入(inject)到@WebServlet 中吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:07 25 4
gpt4 key购买 nike

在我的 Java EE 6-webapp(在最新的 GlassFish 3.1 上运行)中,我使用 JSF2-ManagedBeans 和 @ManagedProperty 将它们注入(inject)其他 ManagedBeans。现在我想知道我是否也可以使用 @ManagedProperty@ManagedBean 注入(inject)到 @WebServlet 中。一些代码:

@WebServlet(name = "vdd")
public class VddServlet extends HttpServlet
{
@ManagedProperty(value = "#{userIdentity}")
private UserIdentity identity;
}

ManagedBean 看起来像这样:

@ManagedBean
public class UserIdentity
{
...
}

是这样的吗?如果没有,我还必须用什么其他方法将 ManagedBean 注入(inject) WebServlet(没有 CDI,目前这不是一个选项 - 因为 GF 3.1 B32/33 与 OSGi-Java EE-apps 结合存在一些问题,但我们时间紧迫)?

最佳答案

在 servlet 中使用 @ManagedProperty 是不可能的,因为这仅适用于 @ManagedBean 类。此外,注入(inject)一个范围小于父级本身的对象也是不可能的,因为这也只会导致并发问题。注入(inject)器会为此抛出运行时异常。 servlet 本质上是应用程序范围内的,并在所有用户之间共享,而您的 UserIdentity bean 似乎是 session 范围内的。

由于 JSF 在 Servlet API 之上运行并将 session 范围的 bean 存储在 session 中,您可以在 servlet 中将其作为 session 属性获取:

UserIdentity identity = (UserIdentity) request.getSession().getAttribute("userIdentity");

请注意,FacesContext 通常在 FacesServlet 以外的 servlet 中也不可用,因此按照建议在 servlet 中使用 FacesContext注释没有任何意义,只会返回 null

关于java - 可以将@ManagedBean 作为@ManagedProperty 注入(inject)到@WebServlet 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4469365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com