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;
                     }
                 }
             }