CDI injectionpoint @httpparam Problem
Frage
folge ich dem Welds doc
im Abschnitt 4.11. Das InjectionPoint Objekt
Es ist ein sehr interessantes Beispiel darüber, wie die HTTP-Parameter mit CDI
erhalten, aber ich kopieren kleisterte der Code in NetBeans, alles kompiliert, hat aber einen Bereitstellungsfehler
Verursacht durch: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Impfstelle hat unbefriedigt Abhängigkeiten. Injektionspunkt: Parameter 1 von java.lang.String com.test.HttpParamProducer.getParamValue (javax.enterprise.inject.spi.InjectionPoint, javax.servlet.ServletRequest); Qualifiers: [@ javax.enterprise.inject.Default ()]
, wie dieses Problem zu lösen ???
public class HttpParamProducer {
@HttpParam("")
@Produces
String getParamValue(
InjectionPoint ip, ServletRequest request) {
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
Lösung 2
es scheint, dass nach zwei Jahren, diese Frage nach wie vor interessiert ist
Dies ist ein kurzes des CDI-spec kommen, wo es nicht um den Behälter erfordert HttpServletRequest als injizierbare Bohne zu belichten
Hier ist eine vernünftige Arbeit um
@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();
}
}
Jetzt @Inject HttpServletRequest wird wie erwartet
glücklich Codierung
Andere Tipps
Jeder Parameter auf einer Producer-Methode eingespritzt wird, und keiner Ihrer Bohnen (einschließlich den Hersteller) liefert die API-Typ ServletRequest diese Injektionsstelle zu erfüllen.