具有多个装饰器文件的站点网格

Posted

技术标签:

【中文标题】具有多个装饰器文件的站点网格【英文标题】:sitemesh with multiple decorator files 【发布时间】:2012-04-21 00:09:30 【问题描述】:

我想要多个装饰器,如下所述:https://github.com/sitemesh/sitemesh2。我在 decorators.xml 中提供了多个装饰器,但主装饰器被应用于我项目中的每个文件。 例如。我的装饰器看起来像这样:

<decorators defaultdir="/WEB-INF/decorators">
    <decorator name="main" page="main.jspx">
       <pattern>/*</pattern>
    </decorator>
    <decorator name="other" page="other.jspx">
        <pattern>/spring/other/*</pattern>
    </decorator>
</decorators>

/spring/some/page.jspx/spring/other/page.jspx 都使用 `main.jspx' 模板进行渲染。

我做错了什么?

【问题讨论】:

【参考方案1】:

我知道文档示例与这个想法相矛盾,但如果您需要尝试一些东西 - 尝试像这样重新排序您的装饰器:

<decorators defaultdir="/WEB-INF/decorators"> 
    <decorator name="other" page="other.jspx"> 
        <pattern>/spring/other/*</pattern> 
    </decorator>
    <decorator name="main" page="main.jspx"> 
       <pattern>/*</pattern> 
    </decorator> 
</decorators> 

根据记忆,我认为 Sitemesh 使用了 first 匹配的装饰器模式,并且按照您指定的顺序始终是“主”装饰器。

【讨论】:

【参考方案2】:

使用以下内容:

<decorators defaultdir="/WEB-INF/decorators"> 
    <decorator name="main" page="main.jspx"> 
       <pattern>/spring/main/*</pattern> 
    </decorator> 
    <decorator name="other" page="other.jspx"> 
        <pattern>/spring/other/*</pattern> 
    </decorator> 
</decorators> 

告诉我它是否有效。

【讨论】:

那行不通。实际上我已经尝试了很多东西,唯一有效的(对于任何模板)是/*/context*。因此,例如/context/x/* 之类的任何模式都不会被应用。

以上是关于具有多个装饰器文件的站点网格的主要内容,如果未能解决你的问题,请参考以下文章

具有多个装饰器的芹菜任务不自动注册任务名称

是否可以绑定到装饰元素容器上的属性?

如何在sitemesh装饰器中获取模型属性或spring的bean?

包含具有属性的 celery 任务的装饰器

复合模式和装饰器模式的区别?

15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用