Вопрос

Я следую Док сварного шва

В разделе 4.11. Объект впрыскивания

Есть очень интересный пример о том, как получить параметр HTTP с помощью CDI

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

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

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

Это короткое прихождение спецификации 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 будет работать, как ожидалось

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top