【问题标题】:Inject the Servlet object in a CDI pojo on glassfish在 glassfish 上的 CDI pojo 中注入 Servlet 对象
【发布时间】:2012-03-21 12:06:15
【问题描述】:

我对 Java EE6 世界很陌生(不过,JEE5,我很了解)。

我的环境是 Glassfish 3.1.2

我正在尝试将 servlet 对象注入 CDI bean(使用 @Named 和 @*Scoped 注释的 pojo)中,该对象被 ${nameofBean.nameofMethode(par1...)} 调用的 jsp 调用

我试试这个:

@Inject
private ServletContext context; (or HTTPServletRequest or HttpServletResponse (for calling sendRedirect))

这给了我以下部署异常:WELD-001408 Unsatisfied dependencies for type [ServletContext] with qualifiers [@Default] at injection point

显然,在 JBoss 上,这可能有效:http://docs.jboss.org/seam/3/servlet/latest/reference/en-US/html/injectablerefs.html

我的一个想法是使用@Produces,但直到现在,我还没有弄清楚该怎么做。

也许是我为什么要这样做的一个词:
我想做一些 CRUD 的东西,但我真的不知道如何处理异常。所以我的想法是:创建一个 CDI Bean,由 JSP 调用并在后端调用一些 ejb。如果 EJB 抛出异常,我想在 CDI Bean 中捕获它并使用请求对象捕获它(重定向到某个地方,设置一条消息......)。通过 servlet 上下文的注入,我还可以访问 POST 参数。我想避免使用 servlet 来支持 jsps 并与 ejbs 建立连接(我认为这太老式了)。

感谢您的帮助

伊夫

【问题讨论】:

  • 我的解决方案:创建一个 webfilter,将 http-response 和 -request 对象设置在具有请求范围的 cdi-beans 中。 bean 现在可以注入到其他每个 bean 中,我可以访问这两个对象。目前,该解决方案似乎对我有用。有没有cmets?

标签: servlets java-ee-6 glassfish-3 cdi


【解决方案1】:

ServletContext 的引用使用@Resource 通过 Weld 注入:

@Resource
private ServletContext servletContext;

但是,您不能注入 HttpServletRequestHttpServletResponse。为此,您需要一个存储请求和响应对象的 servlet 过滤器。 Seam solder 提供此功能。

我不是使用 JSF 或 JSP 进行前端工程的专家,但我确信,存在比使用 ServletContext 或响应对象更合适的异常处理方式...

【讨论】:

  • 这产生了一个运行时异常:在我用 \@Name 注释的 bean 中调用 ejb(由@ejb 注入),我添加 \@Resource 私有 ServletContext 上下文;例外是:javax.naming.NamingException: Lookup failed for 'full.qualify.name.of.class/context'
  • @Yves:对不起,字段名称必须是 servletContext。更正了我的答案。
  • @Yves:这不是名字的问题。 @Resource 仅适用于 EJB。我建议您将 @Stateless 添加到您的托管 bean。
  • 感谢您的建议。请阅读我对这个问题的评论。你觉得这个解决方案怎么样?
猜你喜欢
  • 2017-05-16
  • 2016-02-06
  • 2012-07-29
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2018-08-06
相关资源
最近更新 更多