Custom error page.........please help me
Hi guys,
i'm working on a jsf application and i've decided to use a custom error
page.
What i want is displaying the stacktrace of the application level'
exceptions like nullpointer,mysql exceptions etc....in a custom error
page.
I've followed an example at the end of core java server faces book but
it's doesn' work!!
Please help me,these are my steps...
i've defined in my web.xml
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<error-page>
<error-code>500</error-code>
<location>/errorDisplay.jsp</location>
</error-page>
i've errorDisplay.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<f:subview id="dummy">
<head>
<title><h:outputText value="Problema nell'applicazione"/></title>
</head>
<body>
<h:form>
<p><h:outputText value="Un errore =E8 stato riscontrato"/></p>
<p><h:outputText value="Ecco lo stacktrace"/></p>
<h:inputTextarea value="#{errorBean.stackTrace}"
rows="40" cols="80" readonly="true"/>
</h:form>
</body>
</f:subview>
</html>
and this is my managed bean ErrorBean.java
package giu;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.SQLException;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
public class ErrorBean {
public String getStackTrace() {
FacesContext context = FacesContext.getCurrentInstance();
Map request = context.getExternalContext().getRequestMap();
Throwable ex = (Throwable)
request.get("javax.servlet.error.exception");
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
fillStackTrace(ex, pw);
return sw.toString();
}
private static void fillStackTrace(Throwable t, PrintWriter w) {
if (t == null)
return;
t.printStackTrace(w);
if (t instanceof ServletException) {
Throwable cause = ((ServletException) t).getRootCause();
if (cause != null) {
w.println("Root cause:");
fillStackTrace(cause, w);
}
} else if (t instanceof SQLException) {
Throwable cause = ((SQLException) t).getNextException();
if (cause != null) {
w.println("Next exception:");
fillStackTrace(cause, w);
}
} else {
Throwable cause = t.getCause();
if (cause != null) {
w.println("Cause:");
fillStackTrace(cause, w);
}
}
}
}
I cause mysql exceptions in my application,but i see the standard stack
trace,not my jsp page with stack trace..
i think my error is in web.xml in which 500 is only a type of
error....i've to adding mysql exceptions????
How can i do it?
Please help me