CDI инъекция проблема @httpparam - PullRequest
       6

CDI инъекция проблема @httpparam

4 голосов
/ 06 сентября 2010

Я следую за Сварочным документом

в разделе 4.11. Объект InjectionPoint

Существует очень интересный пример того, как получить параметр http с помощью CDI

но я скопировал код в netbeans, все компилируется, но есть ошибка развертывания

Причина: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Точка впрыска имеет неудовлетворенные зависимости. Точка ввода: параметр 1 из java.lang.String com.test.HttpParamProducer.getParamValue (javax.enterprise.inject.spi.InjectionPoint, javax.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 ]

0 голосов
/ 02 ноября 2012

похоже, что через два года этот вопрос все еще интересует

это краткое описание спецификации CDI, в котором не требуется, чтобы контейнер представлял HttpServletRequest в качестве инъекционного компонента

вот разумная работа вокруг

@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 будет работать как положено

счастливое кодирование

0 голосов
/ 19 января 2011

Каждый параметр в методе производителя вводится, и ни один из ваших bean-компонентов (включая производителей) не предоставляет тип API ServletRequest для удовлетворения этой точке внедрения.

...