CDI впрыска @httpparam проблема
Вопрос
Я следую Док сварного шва
В разделе 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, чтобы удовлетворить эту точку впрыска.