【问题标题】:Attempted to inject an HttpServletRequest before it has been initialized尝试在初始化之前注入 HttpServletRequest
【发布时间】:2013-05-07 08:06:03
【问题描述】:

我有一个使用 maven javaee6 工件生成的 ear 项目,并且具有以下依赖项:

ejb/pom.xml
   -seam-security
   --solder-xxx

war/pom.xml
   -ejb
   *Then I excluded seam-security

在 ejb 项目中,我有一个使用 org.jboss.solder.servlet.http.RequestParam 的 bean,例如页面是否编辑:

@Inject
@RequestParam()
private Instance<String> edit;

但问题是,它抛出了上述错误:"Attempted to inject an HttpServletRequest before it has been initialized"

有什么想法吗?

【问题讨论】:

  • 不幸的是,我认为这些东西从来没有经过真正的测试,如果它在耳朵里,我真的不知道它是否能正常工作。
  • 我明白了,我真的无法解决这个问题。我讨厌使用 f:viewParam 因为在我的情况下注入更方便。但请注意,它适用于 WAR 项目。

标签: jboss7.x cdi deltaspike


【解决方案1】:

EJB 在 HTTP 请求之外运行。将 HTTP 请求中的内容注入 EJB 的能力没有意义。

如果这是一个 CDI Request Scoped 对象,那就有意义了。

【讨论】:

  • 为了清楚起见,我不是将 HTTP 请求注入到 EJB,而是注入到 EJB 项目中的 ConversationScoped bean。不确定这是否会有所作为。
  • 并且对话范围的对象是直接注入到你的 UI 中,还是直接引用?
  • 嗨,John,它是直接注入到 UI 中的。我可以通过将它添加到 jboss 部署描述符来访问 EJB 中的 FacesContext 类,但我仍然有这个错误。所以我认为这是不可能的。
  • 这听起来很傻,但是尝试创建一个 CDI 扩展,在您的 WAR 中的进程注释类型阶段安装对话范围的 bean。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2014-03-02
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2022-12-14
  • 2018-07-18
相关资源
最近更新 更多