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());

   }
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top