5 Replies Latest reply on Sep 21, 2010 8:02 AM by schenger

    exception after message expiry

    ekizhner

      Please help with this prominent problem.

      We use 1.0.0.B4 portlet bridge.

      If the user leaves the screen for an extended period of time and comes back to it later (meanwhile the user session expires), then clicks on it,
      the following exception occurs.

      javax.faces.FacesException: No saved portlet window state for an id ConfigurationPortlet472811327418F97E1B2C095D1A0B0450:view:jbpns_2fdefault_2fplatform_2fManage_2fConfigurationPortletWindowsnpbj
      at org.jboss.portletbridge.context.ServletExternalContextImpl.(ServletExternalContextImpl.java:96)
      at org.jboss.portletbridge.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:164)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:239)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
      at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
      at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
      at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
      at java.lang.Thread.run(Unknown Source)

        • 1. Re: exception after message expiry
          wesleyhales

          Right now, we only have one way to handle this problem via an Ajax request...

          web.xml

          <context-param>
           <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name>
           <param-value>true</param-value>
           </context-param>

          Facelets template xhtml:
          A4J.AJAX.onExpired JavaScript function will be called on client:
          <script type="text/javascript">
           A4J.AJAX.onError = function(req,status,message){
           window.alert("Custom onError handler "+message);
           }
          
           A4J.AJAX.onExpired = function(loc,expiredMsg){
           if(window.confirm("Custom onExpired handler "+expiredMsg+" for a location: "+loc)){
           return loc;
           } else {
           return false;
           }
           }
          </script>
          


          • 2. Re: exception after message expiry

            Hello,
            I am currently using PortletBridge 1.0.0.CR2 with RichFaces 3.3.1.CR1 and I still have this problem.

            The A4J.AJAX.onExpired function is never called instead I got the "javax.faces.FacesException: No saved portlet window state" exception so the A4J.AJAX.onError is called instead.

            Is it a PortletBridge bug or I missed some configuration stuff ?

            This behavor is very nasty for end users.

            • 3. Re: exception after message expiry
              wesleyhales
              • 4. Re: exception after message expiry

                Yes I have add this, but no change.

                The A4J.AJAX.onExpired function is never called.
                So I have add this line, as a workaround, to the A4J.AJAX.onError one
                if( message.indexOf("No saved portlet window state") != -1) {
                window.location.reload();
                }
                This solves the problem for now but it don't really satisfy me.

                • 5. Re: exception after message expiry
                  schenger

                  Hi,

                   

                  i have faced the same problem. Is there any chance to get it work?

                   

                  I added following to web.xml:

                   

                  <context-param>
                          <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
                          <param-value>true</param-value>
                      </context-param>
                      <context-param>
                        <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name>
                        <param-value>true</param-value>
                      </context-param>
                  

                   

                  and i try to react on SessionExpired event in my page:

                   

                                 <script type="text/javascript">
                                  //<![CDATA[
                                     A4J.AJAX.onError = function(req,status,message){
                                       window.alert("Custom onError handler "+message);
                                     }
                          
                                     A4J.AJAX.onExpired = function(loc,expiredMsg){
                                       if(window.confirm("Custom onExpired handler "+expiredMsg+" for a location: "+loc)){
                                         return loc;
                                       } else {
                                         return false;
                                       }
                                     }
                                  //]]>
                                 </script>

                   

                   

                  but the onExpired and onError functions were not called if the session is expired.

                   

                  I use:

                  PortletBridge 2.0.0.FINAL

                  Richfaces 3.3.3.final

                  Facelets 1.1.15

                  Jboss Portal 2.7.2

                   

                  thank you