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 2010/01/18 04:43:40 UTC
svn commit: r900274 -
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java
Author: lu4242
Date: Mon Jan 18 03:43:39 2010
New Revision: 900274
URL: http://svn.apache.org/viewvc?rev=900274&view=rev
Log:
MYFACES-2363 ExceptionHandler implementation requires deal with ajax responses (thanks to Jakob Korherr for provide this patch)
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ErrorPageWriter.java
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=900274&r1=900273&r2=900274&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 Mon Jan 18 03:43:39 2010
@@ -56,9 +56,12 @@
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.context.ResponseWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+import org.apache.myfaces.shared_impl.renderkit.html.HtmlResponseWriterImpl;
import org.apache.myfaces.shared_impl.webapp.webxml.WebXml;
/**
@@ -345,22 +348,54 @@
if (!httpResp.isCommitted())
{
httpResp.reset();
- httpResp.setContentType("text/html; charset=UTF-8");
- try
- {
- Writer writer = httpResp.getWriter();
- debugHtml(writer, facesContext, ex);
- log.log(Level.SEVERE, "An exception occurred", ex);
-
- // mark the response as complete
- facesContext.responseComplete();
-
- errorPageWritten = true;
+ if (facesContext.getPartialViewContext().isAjaxRequest())
+ {
+ // ajax request --> xml error page
+ httpResp.setContentType("text/xml; charset=UTF-8");
+ try
+ {
+ Writer writer = httpResp.getWriter();
+ // can't use facesContext.getResponseWriter(), because it might not have been set
+ ResponseWriter responseWriter = new HtmlResponseWriterImpl(writer, "text/xml", "utf-8");
+ PartialResponseWriter partialWriter = new PartialResponseWriter(responseWriter);
+ partialWriter.startDocument();
+ partialWriter.startError(ex.getClass().getName());
+ if (ex.getCause() != null)
+ {
+ partialWriter.write(ex.getCause().toString());
+ }
+ else
+ {
+ partialWriter.write(ex.getMessage());
+ }
+ partialWriter.endError();
+ partialWriter.endDocument();
+ }
+ catch(IOException ioe)
+ {
+ throw new FacesException("Could not write the error page", ioe);
+ }
}
- catch(IOException ioe)
- {
- throw new FacesException("Could not write the error page", ioe);
+ else
+ {
+ // normal request --> html error page
+ httpResp.setContentType("text/html; charset=UTF-8");
+ try
+ {
+ Writer writer = httpResp.getWriter();
+ debugHtml(writer, facesContext, ex);
+ }
+ catch(IOException ioe)
+ {
+ throw new FacesException("Could not write the error page", ioe);
+ }
}
+ log.log(Level.SEVERE, "An exception occurred", ex);
+
+ // mark the response as complete
+ facesContext.responseComplete();
+
+ errorPageWritten = true;
}
}
}