responseentityexceptionhandler method handling example error custom controlleradvice spring servlets error-handling sitemesh

spring - method - Página de error genérico no decorado



spring rest exception handler example (2)

Este es el archivo más reciente del problema original.

Esta es la página de problema cerrado.

Por lo tanto, parece que necesita asegurarse de que no está utilizando un lanzamiento que tiene más de 2 años de antigüedad :), y debe asegurarse de que su filtro de SiteMesh esté configurado para procesar páginas de error al incluir:

<dispatcher>ERROR</dispatcher>

junto con cualquier otra cosa que necesites ...

Tengo una página de error genérica que no está decorada por SiteMesh.

¿Puedo saber cuál es el motivo?

<filter> <display-name>SiteMesh_Filter</display-name> <filter-name>SiteMesh_Filter</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter-mapping> <filter-name>SiteMesh_Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <error-page> <error-code>404</error-code> <location>/pages/error.jsp</location> </error-page>

Gracias.


Voy a suponer que estás usando Sitemesh 3 como decorador. Su configuración en las preguntas me dice que está usando Sitemesh 2, pero mencionó usar Sitemesh 3 en el comentario a @kschneid answer.

Sitemesh 3 usa una implementación Selector para seleccionar las solicitudes que puede almacenar (decorar). Por defecto, este es el org.sitemesh.webapp.contentfilter.BasicSelector . Este selector tiene dos constructores a saber:

public BasicSelector(String... mimeTypesToBuffer) { this(false, mimeTypesToBuffer); } public BasicSelector(boolean includeErrorPages, String... mimeTypesToBuffer) { this.mimeTypesToBuffer = mimeTypesToBuffer; this.includeErrorPages = includeErrorPages; }

El primero es utilizado por BaseSiteMeshFilterBuilder para construir el selector por defecto. Esto significa que la propiedad includeErrorPages se establecerá en false y el filtro filtrará solo las páginas con un estado de 200 OK . Para superar esto, necesitará de alguna manera usar el otro constructor y establecer includeErrorPages en true .

Esto puede hacerse subclasificando org.sitemesh.config.ConfigurableSiteMeshFilter y reemplazando el applyCustomConfiguration(SiteMeshFilterBuilder builder) protected applyCustomConfiguration(SiteMeshFilterBuilder builder) que termina con un método similar a:

public class ErrorPageEnabledSiteMeshFilter extends ConfigurableSiteMeshFilter { @Override protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) { builder.setCustomSelector(new BasicSelector(true, "text/html", "application/xhtml+xml", "application/vnd.wap.xhtml+xml")) } }

Lo anterior le indicará al constructor que use el selector personalizado que ahora decorará las páginas de error. Lo único que queda es agregar una instancia de ErrorPageEnabledSiteMeshFilter a su ServletContext reemplazando el anterior.