Pregunta

Tengo una aplicación web facelets (JSF 1.2 (myfaces)) y quiero personalizar mi página de error, lo que parece ser algo natural cuando una aplicación madura. Me confundí mucho en el proceso.

Encontré lo siguiente:

  • No he encontrado una manera de personalizar la página de error de FACELETS. No he encontrado dónde está la plantilla. He encontrado soluciones para anular el ViewHandler que haría sendedirect (). Creo que esto debería ser lograble sin escribir código, especialmente el ViewHandler.

  • He encontrado una manera de apagar el manejo de errores de los faceles y usar myfaces 'uno:

código:

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>org.apache.myfaces.ERROR_TEMPLATE_RESOURCE</param-name>
    <param-value>/pages/public/errorPage.jsf</param-value>
</context-param>

Lamentablemente, parece que no puedo hacer que myfaces encuentren una página JSF. Necesito usar una página JSF porque quiero usar el diseño del sitio que está fragmentado en algunas plantillas. Fuente: http://wiki.apache.org/myfaces/handling_server_errors

  • Probé una solución de Tomahawk:

web.xml:

<context-param>
    <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>org.apache.myfaces.ERROR_HANDLER</param-name>
    <param-value>org.apache.myfaces.tomahawk.util.ErrorRedirectJSFPageHandler</param-value>
</context-param>

cara-config.xml:

<navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-outcome>java.lang.Throwable</from-outcome>
        <to-view-id>/pages/public/errorPage.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

Fuente: http://wiki.apache.org/myfaces/handling_server_errors

  • Descubrí que puedo usar el manejo de errores del contenedor a través de <error-page> en web.xml. Reenvié con éxito una página de error JSF. Aquí el problema es que no puedo mostrar la excepción, no sé cómo.

Actualizar: Descubrí cómo - con un breve gerente:

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

ver http://wiki.apache.org/myfaces/handling_server_errors para el resto del código.

Lo que quiero lograr: Quiero usar el mecanismo de manejo de errores de FACELETS sin escribir código y poder mostrar la excepción en una página JSF. Si eso no es posible, me gustaría usar el manejo de errores de MyFaces nuevamente con la excepción de la excepción. Creo que uno de ellos debería ser posible.

¿Fue útil?

Solución

Creo que aún puede hacer la configuración a través de su web.xml:

 <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.xhtml</location>
 </error-page>

Que también se puede usar para códigos de error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top