Jsp JSF1.x通用异常处理

Jsp JSF1.x通用异常处理,jsp,jsf,exception-handling,jsf-1.2,Jsp,Jsf,Exception Handling,Jsf 1.2,如果我的业务层中有一个异常(例如,JDBC连接bean中的SQL异常),如何使用自定义消息将其传播到全局error.jsp页面?在JSF中向用户显示错误消息的一般方法是使用FacesMessage: 在Java方面: ... if (errorOccurred) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("An error occurred blabla...")); } 在JSF(JSP

如果我的业务层中有一个异常(例如,JDBC连接bean中的SQL异常),如何使用自定义消息将其传播到全局
error.jsp
页面?

在JSF中向用户显示错误消息的一般方法是使用FacesMessage:

在Java方面:

...
if (errorOccurred) {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("An error occurred blabla..."));
}

在JSF(JSP或XHTML)页面中,只需在页面中使用
组件即可显示错误。

JSF 1.x不提供任何这种类型的隐式错误处理,尽管您可以使用导航规则(假设使用表单post)重定向到错误页面

我建议您查看更多详细信息

可以根据需要将错误消息放置在请求范围/会话范围/url参数上


假设有一个Servlet容器,您可以使用通常的


java.lang.Exception
/错误页面
在支持bean中,您可以包装并在s中抛出已检查的异常

一些JSF实现/框架将捕获这些错误(ApacheMyFaces/Facelets),因此您必须这样做。

您可以将

<%@ page errorPage="error.jsp" %>

在jour jsp/jsf页面中。在error.jsp中,jou将具有:

<%@ page isErrorPage="true" %>

isErrorPage=“true”将为您的页面提供另一个隐式对象:exception(与您在jsp页面上已有请求和响应的方式相同)。然后可以从异常中提取消息


JSF 2现在有一种处理异常的机制:


我遇到了同样的问题,找到了描述如何在JSF2中使用ExceptionHandler的链接:


我做了​​站点中的错误页面将显示并放置错误的堆栈跟踪 这段代码首先将其放在web.xml中

<error-page>
                <error-code>500</error-code>
                <location>/errorpage.jsf</location>
</error-page>
当您在文件facesconfig中完成这个bean定义时,已经附加了

<managed-bean>
            <description>
                Bean que sirve para llenar la especificacion de un error. Stacktrace 
            </description>
            <managed-bean-name>errorDisplay</managed-bean-name>
            <managed-bean-class>mx.com.tdc.datos.page.bean.ErrorDisplay</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>

这是一个特殊的错误。堆栈跟踪
错误显示
mx.com.tdc.datos.page.bean.ErrorDisplay
一场

我希望这将有助于

这是一个极好的回答,我希望我能给你的答案打10分。
<%@ page isErrorPage="true" %>
<error-page>
                <error-code>500</error-code>
                <location>/errorpage.jsf</location>
</error-page>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      >
<h:head>
    <h:outputStylesheet name="EstilosOV.css" library="css" />
    <!-- <h:outputScript name="sincontext.js" library="scripts"/> -->

</h:head>
<h:body >
<table width="338" border="0" align="center" bordercolor="#FFFFFF">

    <tr bgcolor="#1D2F68">
      <td colspan="4" height="35" class="TablaHeader2"> PLAN SEGURO</td>
    </tr>
    <tr  bgcolor="#FDF2AA">
    <td colspan="4"  class="HeaderExcepcion">
      <h:graphicImage library="images" name="errormark.jpg"/>
      <font size="5px" color="#CC0000" >Error de ejecución</font>
      </td>
    </tr>
    <tr >
    <td colspan="3" class="anuncioWarning2">Ocurrio un error al realizar la operación, favor de intentarlo nuevamente, si el error aún se presenta, favor de notificarlo a soporte técnico al 5147-31-00 extensión 6893</td>
    </tr>
    <tr>
      <td height="17" colspan="3" class="TablaHeader2"></td>
    </tr>

</table>
    <h:form id="formerror">
        <h:inputHidden id="valuestack" value="#{errorDisplay.stackTrace}"></h:inputHidden>
    </h:form>
</h:body>

</html>
public class ErrorDisplay implements Serializable{

    private static final long serialVersionUID = 6032693999191928654L;
    public static Logger LOG=Logger.getLogger(ErrorDisplay.class);

    public String getContacto() {
        return "";
    }

    public String getStackTrace() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestMap = context.getExternalContext().getRequestMap();
        Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");

        StringWriter writer = new StringWriter();
        PrintWriter pw = new PrintWriter(writer);
        fillStackTrace(ex, pw);
        LOG.fatal(writer.toString());

        return writer.toString();
    }

    private void fillStackTrace(Throwable ex, PrintWriter pw) {
        if (null == ex) {
            return;
        }

        ex.printStackTrace(pw);

        if (ex instanceof ServletException) {
            Throwable cause = ((ServletException) ex).getRootCause();

            if (null != cause) {
                pw.println("Root Cause:");
                fillStackTrace(cause, pw);
            }
        } else {
            Throwable cause = ex.getCause();

            if (null != cause) {
                pw.println("Cause:");
                fillStackTrace(cause, pw);
            }
        }
    }
}
<managed-bean>
            <description>
                Bean que sirve para llenar la especificacion de un error. Stacktrace 
            </description>
            <managed-bean-name>errorDisplay</managed-bean-name>
            <managed-bean-class>mx.com.tdc.datos.page.bean.ErrorDisplay</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>