当前位置: 首页 > 面试题库 >

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

林魁
2023-03-14
问题内容

在我的Java EE 6网络应用程序(在最新的GlassFish
3.1上运行)中,我正在使用JSF2-ManagedBeans并将@ManagedProperty其注入到其他ManagedBeans中。现在我想知道是否也可以使用将a
@ManagedBean注入a @WebServlet@ManagedProperty。一些代码:

@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结合使用时会出现一些问题,但是我们时间短)?


问题答案:

@ManagedProperty由于@ManagedBean只能在类中使用,因此无法在servlet中使用。此外,也不可能注入范围小于父对象本身的对象,因为这只会导致并发问题。注入程序将为此抛出运行时异常。servlet本质上是应用程序范围内的,并在所有用户之间共享,并且您的UserIdentitybean似乎是会话范围的。

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

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

请注意,FacesContext除了之外FacesServlet,通常在servlet中也无法使用,因此FacesContext按注释中的建议在servlet中使用没有任何意义,只会返回null



 类似资料:
  • 主要内容:@WebServlet 注解的属性,@WebServlet 注解的使用,@WebServlet 注解 和 web.xml 的优缺点在 Servlet 中,web.xml 扮演的角色十分的重要,它可以将所有的 Servlet 的配置集中进行管理,但是若项目中 Servelt 数量较多时,web.xml 的配置会变得十分的冗长。这种情况下,注解(Annotation)就是一种更好的选择。 与 XML 不同,注解不需要依赖于配置文件,它可以直接在类中使用,其配置只对当前类有效,这样就避免了集

  • 问题内容: 我试图通过注释将整个JSF托管Bean注入另一个托管Bean非常相似,但是我正在注入Bean,而不是Servlet)。这就是我在做什么: 不起作用(JSF 2.0 / Mojarra 2.0.3): 有没有可能或者我需要通过编程方式进行注射? 问题答案: 您需要添加setter和getter 当将解析并注入依赖项时,它将使用setters注入,因此适当的setters / getter

  • 我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。

  • 问题内容: 我有一个带有angular的应用程序,我需要使用这个库http://www.jointjs.com/,所以我下载了joint.min.js和joint.min.css并将它们的路由放置在index.html中,但是我不知道要在app.js中放入什么来注入它,而我一直在从角度获取注入错误。这可能不是这样做的方法吗?我搜索了很多,但是没有找到任何方法。我将不胜感激,在此先感谢您! 问题答案

  • 问题内容: 我可以将自己的POJO注入到托管对象中,如下所示: 我有这个POJO: 这很好。如果将EJB注入到JSF支持bean中,则可以看到,按预期,该值是非null值。 但是,如果我尝试注入到,我得到部署以下异常: SomeEjb现在: Date有一个公开的,无参数的构造函数,我认为CDI只需“满足依赖性”即可。我确信这种行为是“符合规格”的,但是显然我对CDI的理解还存在很大的漏洞。 有人可

  • 例如,我有handler: 为了测试它,我编写了以下测试: 我可以使用模拟变量someCount。我可以用Mockito注释来模拟它吗?