Hallo liebe Leute,
ich habe ein selbstgeschriebenes Servlet innerhalb meiner JSF Applikation, das in seiner ServletResponse die Ausgabe vom FacesServlet senden soll.
Ich habe es jetzt erfolgreich geschafft, den FacesContext in dieser nicht-Faces-Umgebung zu erstellen. Allerdings funktioniert der Aufruf facesContext.renderResponse() nicht. Alle EL Ausdrücke werden korrekt ausgewertet, ManagedBeans wie angefordert instantiiert, jedoch wird die Response einfach nicht gerendert. Ich erhalte eine weiße Seite; es fliegt keine Exception.
Mit folgendem Code verschaffe ich mir Zugriff auf den FacesContext:
Das scheint zu funktionieren. Die Navigation geschieht auf folgende Weise:
Dieser Aufruf hat an einer Stelle, wo ich ihn von innerhalb des Faces lifecycles aus (also aus einer Facelets Seite) funktioniert. Aus meinem Servlet heraus scheint dies nicht zu funktionieren. Hab ich irgendwas wichtiges vergessen? Wäre toll, wenn mir jemand einen Tip geben kann. Diese Problematik ist echt schlecht dokumentiert.
Gruß & Danke
ich habe ein selbstgeschriebenes Servlet innerhalb meiner JSF Applikation, das in seiner ServletResponse die Ausgabe vom FacesServlet senden soll.
Ich habe es jetzt erfolgreich geschafft, den FacesContext in dieser nicht-Faces-Umgebung zu erstellen. Allerdings funktioniert der Aufruf facesContext.renderResponse() nicht. Alle EL Ausdrücke werden korrekt ausgewertet, ManagedBeans wie angefordert instantiiert, jedoch wird die Response einfach nicht gerendert. Ich erhalte eine weiße Seite; es fliegt keine Exception.
Mit folgendem Code verschaffe ich mir Zugriff auf den FacesContext:
Java:
public static FacesContext getFacesContext(final ServletRequest request,
final ServletResponse response) {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext != null)
return facesContext;
FacesContextFactory contextFactory =
(FacesContextFactory)FactoryFinder.getFactory(
FactoryFinder.FACES_CONTEXT_FACTORY);
LifecycleFactory lifecycleFactory =
(LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle =
lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
ServletContext servletContext =
((HttpServletRequest)request).getSession().getServletContext();
facesContext = contextFactory.getFacesContext(servletContext,
request, response, lifecycle);
if(facesContext.getViewRoot() == null)
facesContext.setViewRoot(new UIViewRoot());
return facesContext;
}
Das scheint zu funktionieren. Die Navigation geschieht auf folgende Weise:
Java:
final NavigationHandler nav =
facesContext.getApplication().getNavigationHandler();
nav.handleNavigation(facesContext, null, "viewId");
facesContext.renderResponse();
Dieser Aufruf hat an einer Stelle, wo ich ihn von innerhalb des Faces lifecycles aus (also aus einer Facelets Seite) funktioniert. Aus meinem Servlet heraus scheint dies nicht zu funktionieren. Hab ich irgendwas wichtiges vergessen? Wäre toll, wenn mir jemand einen Tip geben kann. Diese Problematik ist echt schlecht dokumentiert.
Gruß & Danke