Spring 一般错误页未修饰
我有一个通用的错误页面,它不是由SiteMesh修饰的 我可以知道原因吗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
<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。那它是哪一个呢?我已经添加了它,但是它也没有装饰。它怎么了