Je travaille sur une application Web plutôt ancienne qui intègre les technologies suivantes.Sporadic java.lang.IllegalStateException Exception lors du mélange de facettes JSF et de rendu JSP
- SUN JSF RI 1,1
- facelets-api 01/01/14
- JBOSS 4.0.2
- Quipukit 1,6 (une bibliothèque de composants JSF AJAX )
L'application a été initialement développé avec le moteur de rendu JSP. Pour une nouvelle fonctionnalité qui sera bientôt ajoutée, nous aimerions passer aux facelets, mais nous ne pouvons pas réécrire le reste, nous devrons donc exécuter les facelets et le rendu JSP en parallèle. Généralement cela fonctionne, mais à certaines occasions (non reproductible), nous obtenons l'exception suivante sur les parties JSP de l'application.
15:34:45,995 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: getWriter() has already been called for this response
at org.apache.catalina.connector.Response.getOutputStream(Response.java:565)
at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:171)
at teamdev.jsf.util.ResourceFilter.doFilter(SourceFile:87)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)
Lorsque l'exception se produit, il provoque un comportement bizarre, comme les valeurs ne sont pas correctement présentées sur l'action suivante (évidemment la phase JSF n'a pas été traitée correctement)
Voici les parties pertinentes de mon web .xml et faces.config
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsp</param-value>
</context-param>
<!-- Use Documents Saved as *.xhtml -->
<context-param>
<param-name>facelets.VIEW_MAPPINGS</param-name>
<param-value>*.xhtml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<faces-config>
<application>
<message-bundle>validatormessages</message-bundle>
<locale-config>
<default-locale>de_DE</default-locale>
<supported-locale>en_GB</supported-locale>
<supported-locale>en_US</supported-locale>
<supported-locale>fr_FR</supported-locale>
</locale-config>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
...
</faces-config>
Toute aide appréciée ist.
Cordialement
Ce n'est pas le cas, mais ce que nous avons, c'est la commande jstl . Cela peut-il causer des problèmes aussi? –
huo73
Après un examen plus approfondi, il est devenu clair, que cela est causé par le mélange des facelets avec le moteur de rendu JSP et JSTL. Merci pour l'indice qui nous conduit dans la bonne direction. – huo73
De rien. – BalusC