Si tengo una excepción en mi capa de negocio (por ejemplo, una excepción de SQL en mi grano de conexión JDBC), ¿cómo se puede propagar I con un mensaje personalizado a una página global error.jsp
?JSF manejo 1.x excepción genérica
Respuesta
La forma más general, para mostrar mensajes de error al usuario en JSF es utilizar FacesMessage:
Por el lado de Java:
...
if (errorOccurred) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("An error occurred blabla..."));
}
y en el JSF (JSP o XHTML) página, basta con utilizar el <h:messages/>
componente en su página para mostrar el error.
JSF 1.x no proporciona ningún control de errores implícito de este tipo, aunque se puede redirigir a una página de error utilizando reglas de navegación (suponiendo un post forma) ...
<navigation-case>
<description>
Handle a generic error outcome that might be returned
by any application Action.
</description>
<display-name>Generic Error Outcome</display-name>
<from-outcome>loginRequired</from-outcome>
<to-view-id>/must-login-first.jsp</to-view-id>
</navigation-case>
... o el uso de una redirección ...
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String url = extContext.encodeActionURL(extContext
.getRequestContextPath()
+ "/messages.faces");
extContext.redirect(url);
recomiendo mirar en el JSF specification para más detalles.
Los mensajes de error se pueden ubicar en el alcance de la solicitud/parámetros de ámbito de sesión/url, como desee.
Suponiendo un contenedor de servlets, se puede utilizar el habitual web.xml error page configuration.
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errorPage.faces</location>
</error-page>
En su bean de respaldo, se puede envolver y lanzar excepciones comprobadas en RuntimeException s.
Algunas implementaciones/frameworks JSF detectarán estos errores (Apache MyFaces/Facelets), por lo que tendrá que configure them not to.
Usted puede poner
<%@ page errorPage="error.jsp" %>
en jour página JSP/JSF. En error.jsp, Jou tendría:
<%@ page isErrorPage="true" %>
isErrorPage = "true" le dará a su página de otro objeto implícito: excepción (de la misma manera que ya tiene petición y la respuesta en la página JSP). A continuación, puede extraer el mensaje de la excepción.
El JSF 2 ahora tiene un mecanismo para el manejo de excepciones:
http://java.sun.com/javaee/6/docs/api/javax/faces/context/ExceptionHandler.html
vine a mismo problema y encontró enlace que describe cómo se puede utilizar ExceptionHandler en JSF2:
http://jugojava.blogspot.com/2010/09/jsf-2-exception-handling.html
hice una página de error en las caras del sitio y poner el stacktrace del error Este código primero lo puso en la web.xml
<error-page>
<error-code>500</error-code>
<location>/errorpage.jsf</location>
</error-page>
Si bien la página JSF tenía el código
<?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>
Nota ese motivo le permite depurar el StackTrace para una reazon saber cual es la excepción en el campo oculto. Vamos a ver cómo la clase se define recupera StackTrace
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);
}
}
}
}
y que ya está fijado como termine esta definición de frijol en el archivo facesconfig
<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>
y espero que esto sirva
- 1. Lanzar Excepción genérica desalentado?
- 2. ¿Es x + = 1 más eficiente que x = x + 1?
- 3. PHP excepción personalizada manejo
- 4. manejo de excepción en Tpl
- 5. Ventaja de usar "x * = -1". sobre "x * = -1"?
- 6. excepción manejo de un constructor
- 7. Struts 1.x vs Struts 2.x
- 8. ¿`y = x = x + 1;` comportamiento indefinido?
- 9. Simplificar si (x == 1 || x == 2)
- 10. x-y = x + 1 + ¬y problema
- 11. Manejo de un ViewState vencido en JSF y Richfaces
- 12. ¿Cómo incluir CSS en relación con la ruta del contexto en JSF 1.x?
- 13. ¿Captura una excepción genérica en Java?
- 14. Python productor/consumidor con manejo de excepción
- 15. x = y = 1 en Scala?
- 16. Aprendizaje OpenGL ES 1.x
- 17. libusb-1.x VS openUsb
- 18. WCF/WebService: manejo de excepción interoperable
- 19. python doctest excepción manejo de prueba
- 20. Excepción Manejo y apertura de un archivo?
- 21. Elegante manejo de excepción en OpenMP
- 22. Manejo 'La secuencia no tiene elementos' Excepción
- 23. ¿Manejo de excepción barato en Python?
- 24. Manejo de una excepción de Python que se produce dentro de una cláusula de excepción
- 25. ¿Cuándo puede una AggregateException contener más de 1 excepción interna?
- 26. EF Donde (x => x.ColumnVal == 1) vs FirstOrDefault (x => x.Column == 1)
- 27. Haskell: ¿Cuál es la diferencia entre (+1) y (\ x-> x + 1)?
- 28. ¿Cuál es la diferencia entre int x = 1 e int x (1) en C++?
- 29. ¿Por qué es (1/2) * x diferente de 0.5 * x?
- 30. Manejo de excepciones JSF2
se trataba de una excelente respuesta, me gustaría darte 10 puntos por tu respuesta. –