problème CDI injectionpoint de @httpparam
Question
Je suis le doc de Weld
dans la section 4.11. L'objet InjectionPoint
Il y a un exemple très intéressant sur la façon d'obtenir le paramètre http en utilisant CDI
mais je copier-coller le code dans NetBeans, tout est compilé, mais a une erreur de déploiement
causés par: org.jboss.weld.exceptions.DeploymentException: WELD-001408 point d'injection a des dépendances non satisfaites. Point d'injection: paramètre 1 de java.lang.String com.test.HttpParamProducer.getParamValue (javax.enterprise.inject.spi.InjectionPoint, javax.servlet.ServletRequest); Qualifiers: [@ javax.enterprise.inject.Default ()]
comment résoudre ce problème ???
public class HttpParamProducer {
@HttpParam("")
@Produces
String getParamValue(
InjectionPoint ip, ServletRequest request) {
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
La solution 2
il semble que, après deux ans, cette question est toujours intéressé
est une courte venue de la spécification CDI, où il ne nécessite pas le récipient pour exposer HttpServletRequest sous forme de graines injectable
ici est un travail raisonnable autour
@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 va fonctionner comme prévu
heureux de codage
Autres conseils
est injecté chaque paramètre sur une méthode de production, et aucun de vos haricots (y compris les producteurs) fournit le type API ServletRequest pour satisfaire ce point d'injection.