Bei Verwendung von CDI und JSF2 Wie kann ein HTTP-Anfrage-Parameter in eine Bean injiziert werden?Abhängigkeit inject Anfrageparameter mit CDI und JSF2
Antwort
TIPP:bevor Sie weiterlesen, werfen Sie einen Blick auf http://showcase.omnifaces.org/components/param. Do it yourself ist wahrscheinlich veraltet zu sehen, wie Omnifaces heute ein De-facto-Standard ist. Ich hätte das wahrscheinlich nicht geschrieben, wenn omnifaces dies zu der Zeit hatte
CDI löst nicht spezialisierte Probleme wie das Eingeben eines Anforderungsparameters. Das soll durch Erweiterungen gelöst werden.
Dies wird bereits durch Löten bereitgestellt. http://docs.jboss.org/seam/3/solder/latest/reference/en-US/html/injectablerefs.html
Es wird wahrscheinlich in Deltaspike 0.4-Inkubation oder ähnlich auch enthalten sein.
Der genannte Code ist ziemlich einfach zu implementieren. Beispiel unten:
Annotation für die Injektionsstelle zu verwenden (zum Beispiel private String myParam;
)
import javax.enterprise.util.Nonbinding;
import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER })
public @interface RequestParam {
@Nonbinding
public String value() default "";
}
Jetzt haben wir die Anmerkung, aber wir können nicht nur den Container stellen eine @RequestParam
der Abhängigkeits zu injizieren - wir ein offensichtlich brauchen Implementierung.
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
public class RequestParamProducer implements Serializable {
private static final long serialVersionUID = -4260202951977249652L;
@Inject
FacesContext facesContext;
// Producer for @RequestParam
@Produces
@RequestParam
String getRequestParameter(InjectionPoint ip) {
String name = ip.getAnnotated().getAnnotation(RequestParam.class)
.value();
if ("".equals(name))
name = ip.getMember().getName();
return facesContext.getExternalContext().getRequestParameterMap()
.get(name);
}
}
Wie funktioniert es? Nun, ganz einfach zuerst überprüft, ob Sie den gewünschten Parameter wie in @Requestparam("longAndTerribleFieldNameBestToSpecify")
angegeben haben;
Wenn nicht, wird der fieldName verwendet. Wenn Sie also einen Setzer namens setMyInstance annotieren, sucht er nach einem Parameter namens setMyInstance.
Der normale Anwendungsfall wäre eine String-Variable, die genau wie der gewünschte Parameter benannt ist.
Beachten Sie, dass wir FacesContext injizieren, der auch produziert werden muss. Ein Faces Produzent könnte wie folgt aussehen:
class FacesContextProducer {
@Produces @RequestScoped FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
End Nutzung:
@Inject
@RequestParam
private String session_secret;
Beachten Sie, dass dies nicht für Servlets oder ähnlich funktionieren wie sie den Zugang zu Faces erfordert. In diesen Fällen muss die Injektion beispielsweise mit einer Bean umhüllt werden, die @RequesScoped ist. Du spritzt stattdessen diese Bohne ein.
- 1. Inject Schnittstelle Implementierung mit CDI
- 2. Inject EJB und CDI in Spring-Handler
- 3. Java CDI Ungültige DependsOn-Abhängigkeit
- 4. CDI Mehrdeutige Abhängigkeit mit @Produces - warum?
- 5. MVP mit CDI; Kreisförmige Abhängigkeit vermeiden
- 6. Inject Producer-Methode, die String CDI
- 7. Fehler bei Inject Abhängigkeit von DelegatingFilterProxy mit
- 8. Verständnis cdi Instanz <> und .get() vs @Inject
- 9. Inject Wert in Abhängigkeit injiziert
- 10. CDI @Dependent und @New
- 11. So injizieren CDI-Abhängigkeit in JAX-RS ClientRequestFilter-Provider
- 12. AngularJS: Inject-Abhängigkeit in einem Schuss
- 13. Play Framework: Abhängigkeit Inject Action Builder
- 14. Java CDI @PersistenceContext und Threadsicherheit
- 15. Inject Abhängigkeit während Modellbindung Microsoft Web API
- 16. Viewscoped JSF und CDI Bean
- 17. Mit Jersey 2.1 mit CDI
- 18. Wie man @Inject und CDI für Enterprise-Beans mit JAX-RS 2.0 (Resteasy) verwendet
- 19. Guice - Inject-Abhängigkeit in eine Klasse mit statischen Hilfsmethoden
- 20. Wie können wir Abhängigkeit in eckige Fabrik mit $ inject injizieren?
- 21. CDI mehrdeutige Abhängigkeiten
- 22. JDBCTemplate für JavaEE und CDI
- 23. Anfahrt Anfrageparameter in Compojure
- 24. DeltaSpike benutzerdefinierte ConfigSource mit CDI
- 25. CDI Injektion Arten
- 26. Wie funktioniert die CDI-Injektion in MDBs und @Scheduled Beans?
- 27. JEE6 - @ApplicationException - @Inject und @PostConstruct nicht aufgerufen
- 28. Nicht verwaltete Klassen mit CDI einsperren?
- 29. Java EE 6 WebService und CDI-Injektion
- 30. JSF2 Aktionsparameter