在Glassfish上的CDI pojo中注入Servlet对象

时间:2012-03-21 12:06:16

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

我在Java EE6世界中很安静(但是,JEE5,我知道的很多)。

我的环境是Glassfish 3.1.2

我正在尝试在一个CDI bean(一个用@Named和@ * Scoped注释的pojo)中注入servlet对象,这个对象是用$ {nameofBean.nameofMethode(par1 ...)}

调用的jsp

我试试这个:

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

这给了我以下部署异常:WELD-001408类型[ServletContext]的不满意依赖关系,在注入点使用限定符[@Default]

显然,在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建立连接(我认为这样做太过时了)。

感谢您的帮助

Yves

1 个答案:

答案 0 :(得分:-1)

使用ServletContext

向Weld注入对@Resource的引用
@Resource
private ServletContext servletContext;

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

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