我跟随 韦尔德的文档

在第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来满足该注入点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top