Spring 一般错误页未修饰

Spring 一般错误页未修饰,spring,servlets,error-handling,sitemesh,Spring,Servlets,Error Handling,Sitemesh,我有一个通用的错误页面,它不是由SiteMesh修饰的 我可以知道原因吗 <filter> <display-name>SiteMesh_Filter</display-name> <filter-name>SiteMesh_Filter</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filte

我有一个通用的错误页面,它不是由SiteMesh修饰的

我可以知道原因吗

<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>

SiteMesh_过滤器
SiteMesh_过滤器
com.opensymphony.module.sitemesh.filter.PageFilter
SiteMesh_过滤器
/*
404
/页面/error.jsp
谢谢

是原始版本的最新存档

是已关闭的问题页面

因此,看起来您需要确保您没有使用超过2年的版本:),并且您需要确保您的SiteMesh筛选器配置为处理错误页面,包括:

<dispatcher>ERROR</dispatcher>
错误

以及您需要的其他任何东西…

我假设您正在使用Sitemesh 3作为装饰器。问题中的配置告诉我您正在使用Sitemesh 2,但您在@kschneid-answer的评论中提到使用Sitemesh 3

Sitemesh 3使用
选择器
实现来选择它可以缓冲(装饰)哪些请求。默认情况下,这是
org.sitemesh.webapp.contentfilter.BasicSelector
。此选择器有两个构造函数,即:

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

public BasicSelector(boolean includeErrorPages, String... mimeTypesToBuffer) {
    this.mimeTypesToBuffer = mimeTypesToBuffer;
    this.includeErrorPages = includeErrorPages;
}
默认情况下,
BaseSiteMeshFilterBuilder使用前者构建选择器。这意味着
includeErrorPages
属性将设置为
false
,并且只有状态为200 OK的页面才会被过滤器缓冲。要克服这个问题,您需要以某种方式使用另一个构造函数,并将
includeErrorPages
设置为
true

这可以通过子类化
org.sitemesh.config.ConfigurableSiteMeshFilter
并覆盖受保护的
applyCustomConfiguration(SiteMeshFilterBuilder)
方法来完成,该方法的结尾类似于:

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"))
    }
}

上面将指示构建器使用自定义选择器,该选择器现在将装饰错误页面。剩下的唯一一件事就是在
ServletContext
中添加一个
errorPageEnabledItemsFilter
实例,以替换旧实例。

请提供任何指导。如果需要更多信息,请告诉我。您使用的是Sitemesh 2还是Sitemesh 3?您的过滤器配置是针对Sitemesh 2的,而您在对@kschneid的评论中说您使用的是Sitemesh 3。那它是哪一个呢?我已经添加了它,但是它也没有装饰。它怎么了