Apache Tiles 2.1 - 如何防止继承的列表属性被复制?

时间:2009-05-29 04:20:32

标签: tiles apache-tiles

我正在使用Apache Tiles 2.1开展项目。

我遇到的问题是,使用列表属性扩展模板会创建这些列表项的副本...每个继承级别都有一组重复项。

作为一个例子,这里是基本定义,以及它将产生的页面:

<definition name="base" template="somePage.jsp">
    <!-- snip -->
    <put-list-attribute name="styles">
        <add-attribute value="base.css"/>
    </put-list-attribute>
</definition>

这会产生像这样的html,如预期的那样:

<html>
    <head>
        <!-- snip -->
        <link rel="stylesheet" type="text/css" href="../css/base.css"/>
    </head>
    <body>
         <!-- snip-->
    </body>
</html>

如果我像这样扩展定义:

<definition name="firstExtension" extends="base">
    <!-- snip -->
    <put-list-attribute name="styles" inherit="true">
        <add-attribute value="someOther.css"/>
    </put-list-attribute>
</definition>

同样,正如预期的那样,我得到了这个结果:

<html>
    <head>
        <!-- snip -->
        <link rel="stylesheet" type="text/css" href="../css/base.css"/>
        <link rel="stylesheet" type="text/css" href="../css/someOther.css"/>
    </head>
    <body>
         <!-- snip-->
    </body>
</html>

但是,如果我扩展前一个,问题就开始了:

<definition name="secondExtension" extends="firstExtension">
    <!-- snip -->
    <put-list-attribute name="styles" inherit="true">
        <add-attribute value="evenMore.css"/>
    </put-list-attribute>
</definition>

这个第二级扩展产生了这个:

<html>
    <head>
        <!-- snip -->
        <link rel="stylesheet" type="text/css" href="../css/base.css"/>
        <link rel="stylesheet" type="text/css" href="../css/base.css"/> <!-- note: duplicate! -->
        <link rel="stylesheet" type="text/css" href="../css/someOther.css"/>
        <link rel="stylesheet" type="text/css" href="../css/evenMore.css"/>
    </head>
    <body>
         <!-- snip-->
    </body>
</html>

对于每个扩展定义,“原始”列表继承的属性会被复制一次,即使该定义没有向列表属性添加任何内容。

我试图让我的定义非常干,所以在某些情况下我有4-5级的继承。因此,“常用”css文件重复 4-5次,即使只有“最低”定义是唯一一个将另一个css文件添加到列表中。

这是瓷砖中的错误,还是我只是以不打算的方式使用它们?有没有办法解决这个问题,而不是简单地消除inherit="true"?如果可能的话,我想避免在每个定义上写相同的“核心”css和javascript文件。

1 个答案:

答案 0 :(得分:2)

事实证明这确实是Apache tiles 2.1.2中的一个错误,而不是我的配置问题。

它已经修复,将包含在2.1.3更新中:

请参阅tiles JIRA issue了解相关信息。