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:11:46 UTC
svn commit: r1159684 - in
/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces:
context/MyFacesExceptionHandlerWrapperImpl.java
renderkit/ErrorPageWriter.java
Author: lu4242
Date: Fri Aug 19 17:11:45 2011
New Revision: 1159684
URL: http://svn.apache.org/viewvc?rev=1159684&view=rev
Log:
MYFACES-3286 ExceptionHandler implementation should set response status codes before throw exception or show error page
Modified:
myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java
myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java
Modified: myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java?rev=1159684&r1=1159683&r2=1159684&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/context/MyFacesExceptionHandlerWrapperImpl.java Fri Aug 19 17:11:45 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/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java?rev=1159684&r1=1159683&r2=1159684&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java Fri Aug 19 17:11:45 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");