2013-03-12 64 views
3

我有一个通用的错误页面没有由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> 

谢谢。

+0

任何人都请帮忙。 – peterwkc 2013-03-13 08:25:25

+0

请提供任何指导。请让我知道是否需要进一步的信息。 – peterwkc 2013-03-14 01:41:52

+0

你使用Sitemesh 2或3吗?你的过滤器配置适用于Sitemesh 2,而在你对@kschneid的评论中,你说你使用Sitemesh 3.那它是哪一个? – Bart 2014-03-14 15:23:24

回答

2

This是原始问题的最新归档。

This是已关闭的问题页面。

因此,它看起来像你需要确保你没有使用超过2年的发布:),并且你需要确保SiteMesh过滤器被配置为通过包括以下内容来处理错误页面:

<dispatcher>ERROR</dispatcher> 

与任何你需要的人一起...

+0

我已添加它,但它也未能装饰。 “ – peterwkc 2013-03-28 02:53:05

+0

请帮忙。我努力了。我正在使用sitemesh3 alpha 2.jar – peterwkc 2013-04-17 09:18:57

2

我要你使用了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替换旧的。