You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/08/19 19:12:35 UTC

svn commit: r1159685 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces: context/MyFacesExceptionHandlerWrapperImpl.java renderkit/ErrorPageWriter.java

Author: lu4242
Date: Fri Aug 19 17:12:35 2011
New Revision: 1159685

URL: http://svn.apache.org/viewvc?rev=1159685&view=rev
Log:
MYFACES-3286 ExceptionHandler implementation should set response status codes before throw exception or show error page

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java?rev=1159685&r1=1159684&r2=1159685&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java Fri Aug 19 17:12:35 2011
@@ -36,7 +36,9 @@ import javax.faces.event.AbortProcessing
 import javax.faces.event.ExceptionQueuedEvent;
 import javax.faces.event.ExceptionQueuedEventContext;
 import javax.faces.event.SystemEvent;
+import javax.servlet.http.HttpServletResponse;
 
+import org.apache.myfaces.lifecycle.ViewNotFoundException;
 import org.apache.myfaces.renderkit.ErrorPageWriter;
 import org.apache.myfaces.shared.util.WebConfigParamUtils;
 import org.apache.myfaces.spi.WebConfigProvider;
@@ -78,7 +80,7 @@ public class MyFacesExceptionHandlerWrap
     
             _isErrorPagePresent = webConfigProvider.isErrorPagePresent(facesContext.getExternalContext());
             _useMyFacesErrorHandling = WebConfigParamUtils.getBooleanInitParameter(facesContext.getExternalContext(),
-                    ErrorPageWriter.ERROR_HANDLING_PARAMETER, true);
+                    ErrorPageWriter.ERROR_HANDLING_PARAMETER, facesContext.isProjectStage(ProjectStage.Development) ? true : false);
             _inited = true;
         }
     }
@@ -199,7 +201,23 @@ public class MyFacesExceptionHandlerWrap
                 // save current view in the request map to access it on the error page
                 facesContext.getExternalContext().getRequestMap().put(ErrorPageWriter.VIEW_KEY, facesContext.getViewRoot());
             }
-            super.handle();
+            try
+            {
+                super.handle();
+            }
+            catch (FacesException e)
+            {
+                FacesContext facesContext = FacesContext.getCurrentInstance();
+                if (e.getCause() instanceof ViewNotFoundException)
+                {
+                    facesContext.getExternalContext().setResponseStatus(HttpServletResponse.SC_NOT_FOUND);
+                }
+                else
+                {
+                    facesContext.getExternalContext().setResponseStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                }
+                throw e;
+            }
             return;
         }
         else

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java?rev=1159685&r1=1159684&r2=1159685&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java Fri Aug 19 17:12:35 2011
@@ -69,6 +69,7 @@ import javax.faces.view.Location;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+import org.apache.myfaces.lifecycle.ViewNotFoundException;
 import org.apache.myfaces.shared.renderkit.html.HtmlResponseWriterImpl;
 import org.apache.myfaces.shared.util.ClassUtils;
 import org.apache.myfaces.shared.util.StateUtils;
@@ -484,6 +485,24 @@ public final class ErrorPageWriter
             facesContext.getExternalContext().responseReset();
         }
 
+        int responseStatus = -1;
+        for (Throwable ex : exs)
+        {
+            if (ex instanceof ViewNotFoundException)
+            {
+                responseStatus = HttpServletResponse.SC_NOT_FOUND;
+                break;
+            }
+            else
+            {
+                responseStatus = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
+            }
+        }
+        if (responseStatus != -1)
+        {
+            facesContext.getExternalContext().setResponseStatus(responseStatus);
+        }
+        
         // normal request --> html error page
         facesContext.getExternalContext().setResponseContentType("text/html");
         facesContext.getExternalContext().setResponseCharacterEncoding("UTF-8");