ICEfaces
  1. ICEfaces
  2. ICE-5241

Refactored ServletExternalContext.java breaks all Spring webflow applications

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.8.2, 1.8.2-EE-GA
    • Fix Version/s: 1.8.2-EE-GA_P01, 1.8.3
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      ICEFaces 1.8.2 and Spring webflow

      Description

      Changes for revision 19217 cause the following exception in every Spring webflow page transition. Reloading the page causes the page to appear.

      old code:
       public String getRequestServletPath() {
      // return requestServletPath == null ? initialRequest.getServletPath() : requestServletPath;
                //crazy "workaround": solves the different behaviour MyFaces and Icefaces (including Sun-RI) need from this method
              boolean callFromMyfaces = new Exception().getStackTrace()[1].getClassName().startsWith("org.apache.myfaces");
              if (callFromMyfaces) {
                  return requestServletPath == null ? initialRequest.getServletPath() : requestServletPath;
              } else {
                  String servletPath = (String) initialRequest.getAttribute("javax.servlet.forward.servlet_path");
                  return servletPath == null ? initialRequest.getServletPath() : servletPath;
              }
          }

      new code:
      public String getRequestServletPath() {
              return requestServletPath == null ? initialRequest.getServletPath() : requestServletPath;
          }

      If the refactoring was just for clean up, then it should be reverted. If there was a functional reason for the change, we need a different approach.

      There is an Ivy build issue which masks the problem when building with ICEFaces version 1.8.2, see http://jira.icefaces.org/browse/ICE-5236




      Full stack trace:

      javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /main Not Found in ExternalContext as a Resource
      com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:158)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:173)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

      root cause

      java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /main Not Found in ExternalContext as a Resource
      com.icesoft.faces.context.View.servePage(View.java:152)
      com.icesoft.faces.webapp.http.core.MultiViewServer.service(MultiViewServer.java:67)
      com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
      com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:149)
      com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
      com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:173)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

      root cause

      javax.faces.FacesException: Problem in renderResponse: /main Not Found in ExternalContext as a Resource
      com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:296)
      com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:159)
      org.springframework.faces.webflow.FlowViewHandler.renderView(FlowViewHandler.java:92)
      com.icesoft.faces.context.BridgeFacesContext$SwitchViewHandler.renderView(BridgeFacesContext.java:782)
      com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
      com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
      com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:19)
      com.icesoft.faces.context.View$2$1.respond(View.java:48)
      com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:201)
      com.icesoft.faces.context.View$2.serve(View.java:77)
      com.icesoft.faces.context.View.servePage(View.java:149)
      com.icesoft.faces.webapp.http.core.MultiViewServer.service(MultiViewServer.java:67)
      com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
      com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:149)
      com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
      com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:173)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

      root cause

      java.io.FileNotFoundException: /main Not Found in ExternalContext as a Resource
      com.sun.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:121)
      com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:91)
      com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:268)
      com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:159)
      org.springframework.faces.webflow.FlowViewHandler.renderView(FlowViewHandler.java:92)
      com.icesoft.faces.context.BridgeFacesContext$SwitchViewHandler.renderView(BridgeFacesContext.java:782)
      com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
      com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
      com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:19)
      com.icesoft.faces.context.View$2$1.respond(View.java:48)
      com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:201)
      com.icesoft.faces.context.View$2.serve(View.java:77)
      com.icesoft.faces.context.View.servePage(View.java:149)
      com.icesoft.faces.webapp.http.core.MultiViewServer.service(MultiViewServer.java:67)
      com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
      com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:149)
      com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
      com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
      com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
      com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
      org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:173)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
      org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
      org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
      org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

        Activity

        Hide
        Mircea Toma added a comment -

        Here's the reason why the change was made in ServletExternalContext.getRequestServletPath method: http://jira.icefaces.org/browse/ICE-4791?focusedCommentId=26105&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_26105

        Show
        Mircea Toma added a comment - Here's the reason why the change was made in ServletExternalContext.getRequestServletPath method: http://jira.icefaces.org/browse/ICE-4791?focusedCommentId=26105&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_26105
        Hide
        Mircea Toma added a comment -

        Avoid using javax.servlet.forward.servlet_path for error pages because the internal dispatch executed by /the servlet container will return the servlet path of the AJAX request instead the page load request.
        The main reason we need to introduce this compromise is the special status the AJAX requests have relative to the JSF lifecycle.

        Show
        Mircea Toma added a comment - Avoid using javax.servlet.forward.servlet_path for error pages because the internal dispatch executed by /the servlet container will return the servlet path of the AJAX request instead the page load request. The main reason we need to introduce this compromise is the special status the AJAX requests have relative to the JSF lifecycle.
        Hide
        Ted Goddard added a comment -

        This fix appears to break regular forwarding to ICEfaces pages. Try

        http://localhost:8080/auctionMonitor/

        Show
        Ted Goddard added a comment - This fix appears to break regular forwarding to ICEfaces pages. Try http://localhost:8080/auctionMonitor/
        Hide
        Ted Goddard added a comment -

        JSF itself does not need to check javax.servlet.forward.servlet_path during Lifecycle execution because this forwarding is handled automatically by the JSP implementation. JSF executes JSPs whereas ICEfaces parses the files directly and builds a component tree.

        Show
        Ted Goddard added a comment - JSF itself does not need to check javax.servlet.forward.servlet_path during Lifecycle execution because this forwarding is handled automatically by the JSP implementation. JSF executes JSPs whereas ICEfaces parses the files directly and builds a component tree.
        Hide
        Mircea Toma added a comment -

        While debugging "swf-booking-faces-qa" I could not detect the usage of ServletExternalContext. getRequestServletPath method by Spring, JSF-RI or ICEfaces before having the exception reproduced. I even rollbacked #19217 revision changes to double check but I could still see the exception occurring.
        The viewId seems to be acquired in RestoreViewPhase.execute method by invoking ExternalContext.getRequestPathInfo method. But looking at ServletExternalContext history I cannot see any recent changes made to ServletExternalContext .getRequestPathInfo method.
        So, in conclusion, I doubt that the problem is related to #19217 changes.

        Show
        Mircea Toma added a comment - While debugging "swf-booking-faces-qa" I could not detect the usage of ServletExternalContext. getRequestServletPath method by Spring, JSF-RI or ICEfaces before having the exception reproduced. I even rollbacked #19217 revision changes to double check but I could still see the exception occurring. The viewId seems to be acquired in RestoreViewPhase.execute method by invoking ExternalContext.getRequestPathInfo method. But looking at ServletExternalContext history I cannot see any recent changes made to ServletExternalContext .getRequestPathInfo method. So, in conclusion, I doubt that the problem is related to #19217 changes.
        Hide
        Mircea Toma added a comment -

        Calling ServletExternalContext.setRequestServletPath method only in MyFaces environment. D2DViewHandler was trying to keep in sync the servlet path with the viewId to make MyFaces work. The problem was that the synchronization was applied regardless of the environment.

        The usage of javax.servlet.forward.servlet_path attribute is really not necessary, the previous implementation of the method was hiding "requestServletPath" field with a local variable with the same name. The result was that the call of ServletExternalContext.setRequestServletPath method was having no effect thus making things work properly (by mistake).

        Show
        Mircea Toma added a comment - Calling ServletExternalContext.setRequestServletPath method only in MyFaces environment. D2DViewHandler was trying to keep in sync the servlet path with the viewId to make MyFaces work. The problem was that the synchronization was applied regardless of the environment. The usage of javax.servlet.forward.servlet_path attribute is really not necessary, the previous implementation of the method was hiding "requestServletPath" field with a local variable with the same name. The result was that the call of ServletExternalContext.setRequestServletPath method was having no effect thus making things work properly (by mistake).
        Hide
        Joanne Bai added a comment -

        swf booking demo is verified functioning correctly with this fix. It's just that in IE8, the layout is still a bit off the page when displaying Current Hotel Bookings

        Test Environment:
        ICEfaces-1.8.2-ee branch revision #20725
        Tomcat 6
        IE8 and FF3.5

        Show
        Joanne Bai added a comment - swf booking demo is verified functioning correctly with this fix. It's just that in IE8, the layout is still a bit off the page when displaying Current Hotel Bookings Test Environment: ICEfaces-1.8.2-ee branch revision #20725 Tomcat 6 IE8 and FF3.5

          People

          • Assignee:
            Unassigned
            Reporter:
            Greg Dick
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: