# Faces response aus einem anderen Servlet heraus rendern



## jule37 (24. Mrz 2010)

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:

```
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:


```
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


----------



## maki (24. Mrz 2010)

> Wäre toll, wenn mir jemand einen Tip geben kann. Diese Problematik ist echt schlecht dokumentiert.


Ich höre zum ersten mal das man das so wie du möchtest macht, darf man fragen wozu?


----------



## jule37 (24. Mrz 2010)

ich möchte REST links implementieren


----------



## MrWhite (25. Mrz 2010)

Das machste besser über einen eigenen Handler oder zumindest in eine eigene Servlet-Basisklasse;


----------



## jule37 (26. Mrz 2010)

MrWhite hat gesagt.:


> Das machste besser über einen eigenen Handler oder zumindest in eine eigene Servlet-Basisklasse;



wenn ich wüsste wie das geht hätt ich nicht so doof gefragt 

könntest du mir vielleicht wenigstens nen ansatz geben?


----------

