通用错误页面没有装饰
问题描述:
我有一个通用的错误页面没有由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 3作为装饰承担。你在问题中的配置告诉我你正在使用Sitemesh 2,但你提到在@kschneid答案的评论中使用Sitemesh 3。
Sitemesh 3使用Selector
实现来选择它可缓冲(装饰)的请求。默认情况下,这是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 builder)
法类似的方法结束了:
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"))
}
}
以上将指示使用的自定义选择现在将装点错误页面的建设者。剩下的唯一东西就是将ErrorPageEnabledSiteMeshFilter
的实例添加到ServletContext
替换旧的。
任何人都请帮忙。 – peterwkc 2013-03-13 08:25:25
请提供任何指导。请让我知道是否需要进一步的信息。 – peterwkc 2013-03-14 01:41:52
你使用Sitemesh 2或3吗?你的过滤器配置适用于Sitemesh 2,而在你对@kschneid的评论中,你说你使用Sitemesh 3.那它是哪一个? – Bart 2014-03-14 15:23:24