CDI IndectionPoint @httpparam问题
题
我跟随 韦尔德的文档
在第4.11节中。注入点对象
关于如何使用CDI获得HTTP参数的一个非常有趣的示例
但是我将代码复制到NetBeans中,所有内容都编译了,但是有一个部署错误
引起的:org.jboss.weld.exceptions.deploymentException:WELD-001408注射点不满意。注入点:Java.lang.String com.test.httpparamproducer.getParamvalue(javax.enterprise.Inject.Inject.Spi.InoctionPoint,javax.servlet.servlet.servlet.servletrequest);预选赛:[@javax.enterprise.inject.default()
如何解决这个问题呢???
public class HttpParamProducer {
@HttpParam("")
@Produces
String getParamValue(
InjectionPoint ip, ServletRequest request) {
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
解决方案 2
似乎经过两年后,这个问题仍然很感兴趣
这是CDI规格的短暂临时,它不需要容器将HttpservletRequest公开为注射bean
这是一项合理的工作
@WebListener
public class HttpServletRequestProducer implements ServletRequestListener {
private final static ThreadLocal<HttpServletRequest> holder = new ThreadLocal<HttpServletRequest>();
@Override
public void requestDestroyed(ServletRequestEvent sre) {
holder.remove();
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
holder.set((HttpServletRequest)sre.getServletRequest());
}
@Produces @RequestScoped HttpServletRequest get() {
return holder.get();
}
}
现在@Inject httpservletrequest将按预期工作
愉快的编码
其他提示
注入生产者方法上的每个参数,您的豆(包括生产者)都没有提供API类型的ServletRequest来满足该注入点。
不隶属于 StackOverflow