2012-03-21 59 views
4

我在Java EE6世界中很安静(不过JEE5,我知道的很好)。在Glassfish上的CDI pojo中注入Servlet对象

我的环境是Glassfish的3.1.2

我想在一个CDI豆注入的servlet对象(与@Named和注释的一个POJO @ *范围的)被称为一个用jsp $ {nameofBean。 nameofMethode(PAR1 ...)}

我试试这个:

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

这给了我以下部署例外:用于注射点预选赛[@default]类型[ServletContext中] WELD-001408不满意的依赖

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

感谢您的帮助

伊夫

+2

我的解决方法:创建一个webfilter,它将http-response和-request对象设置为具有请求范围的cdi-beans。现在可以将bean注入到其他bean中,并且我可以访问这两个对象。目前,该解决方案为我工作。任何意见? – Yves 2012-04-23 14:27:08

回答

-1

ServletContext的引用注入焊接使用@Resource

@Resource 
private ServletContext servletContext; 

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

我没有使用JSF或JSP前端工程方面的专家,但我相信,一个更合适的方式来处理异常比使用ServletContext或响应对象存在...

+1

这会产生一个运行时异常:在我的bean中,在用@ @Name注释的bean中,调用ejb(由@ejb注入),我添加了@ @Resource private ServletContext context;而异常是:javax.naming.NamingException:'full.qualify.name.of.class/context'的查找失败。 – Yves 2012-03-21 12:43:34

+0

@Yves:对不起,字段名必须是'servletContext'。更正了我的答案。 – kraftan 2012-03-21 19:26:33

+1

@Yves:这不是名称的问题。 '@ Resource'只适用于EJB。我建议你在托管bean中添加'@ Stateless'。 – kraftan 2012-03-21 20:37:04