Domanda

di Weld doc

nella sezione 4.11. L'oggetto InjectionPoint

C'è un esempio molto interessante su come ottenere il http parametro con CDI

ma ho copia-incollato il codice in NetBeans, tutto viene compilato, ma ha un errore di distribuzione

Causato da: org.jboss.weld.exceptions.DeploymentException: WELD-001.408 punto di iniezione ha dipendenze non soddisfatte. punto di iniezione: parametro 1 di java.lang.String com.test.HttpParamProducer.getParamValue (javax.enterprise.inject.spi.InjectionPoint, javax.servlet.ServletRequest); Qualificazioni: [@ javax.enterprise.inject.Default ()]

come risolvere questo problema ???

public class HttpParamProducer {

   @HttpParam("")
   @Produces
   String getParamValue(
           InjectionPoint ip, ServletRequest request) {

      return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());

   }
}
È stato utile?

Soluzione 2

sembra che dopo due anni, questa domanda è ancora interessato

questo è un breve venuta della specifica CDI, dove non richiede il contenitore per esporre HttpServletRequest come fagiolo iniettabile

qui è un lavoro ragionevole intorno

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

Ora @Inject HttpServletRequest lavoreranno come previsto

felice di codifica

Altri suggerimenti

Ogni parametro su un metodo produttore viene iniettato, e nessuno dei vostri fagioli (compresi i produttori) fornisce il tipo di API ServletRequest per soddisfare questo punto di iniezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top