2010-11-25 22 views
2

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

Répondre

2

JSP appellera getWriter() quand il utilise scriptlet expressions (<%= %>) ou lorsque vous écrivez explicitement à la sortie par out.print dans un scriptlet (<% %>).

Vérifiez si vous n'avez aucune de ces choses dans vos pages JSP.

+0

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

+0

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

+0

De rien. – BalusC