Bonjour à tous.

J'ai une erreur déclenchée par la FacesServlet de JSF dont voici la trace :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
javax.faces.FacesException: Cannot forward after response has been committed
	at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:142)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
En debuggant les sources de mon implémentation de JSF (mojarra 2.1.4) j'ai remarqué que cette exception était levée lors de l'instruction suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
lifecycle.render(context);
J'ai aussi remarqué que c'est le bout d'instruction suivant qui conduit à cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
			StreamResult iStreamResult = new StreamResult(new StringWriter());
			
			if (pageContext != null) {
				iStreamResult = new StreamResult(pageContext.getOut());
			}
			
	        Source source = new DOMSource(iNode);

	        // Perform the transformation
			iTransformer.transform(source, iStreamResult);

			iStreamResult.getWriter().close();
notamment la ligne en gras. Si je remplace le
iStreamResult
par, par exemple,
new StreamResult(new StringWriter())
je n'ai plus d'exception levée mais bien évidemment je n'ai pas non plus le résultat escompté.
Ce que je ne comprends pas c'est que le problème vienne de la ligne en gras; si c'était le StreamResult qui posait problème, alors l'exception devrait toujours être levée si je met la ligne en gras en commentaire (ce qui n'est pas le cas). De plus je pense avoir fait le necessaire pour clore le flux.

Je précise que je fais appel à la servlet FacesServlet via une autre servlet (
Code : Sélectionner tout - Visualiser dans une fenêtre à part
			iServletRequest.getRequestDispatcher("/FacesServlet/*").include(iServletRequest,iServletResponse);
).

Je sais que ce problème est assez pointilleux mais j'espère que vous pourrez m'éclaircir.
Merci d'avance.