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

发布于 2024-07-22 14:11:08 字数 2584 浏览 6 评论 0原文

我正在使用 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 文件。

I'm working on a project using Apache Tiles 2.1.

I am running into an issue where extending templates with list attributes is creating duplicates of those list items... one set of duplicates for each level of inheritance.

As an example, here is the base definition, and the page it would produce:

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

This would produce html like this, as expected:

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

If I extend the definiton like this:

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

Again, as expected, I get this result:

<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>

However, if I extend the previous one, the problems start:

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

This second level extension produces this:

<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>

The "original" lists attributes that are inherited get duplicated once for each extended definition, even if that definition does not add anything to the list attribute.

I'm trying to keep my definitions very DRY, so I have 4-5 levels of inheritance in some cases. So the "always used" css files get duplicated 4-5 times, even when only the "lowest" definition is the only one to add another css file to the list.

Is this a bug in tiles, or am I simply using them in a way that was not intended? Is there some way I could remedy this problem without simply eliminating the inherit="true" ? I'd like to avoid writing the same "core" css and javascript files on every single definition if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难愈 2024-07-29 14:11:08

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

它已被修复并将包含在 2.1.3 更新中:

请参阅 tiles JIRA 问题 关于它。

Turns out that this is indeed a bug in Apache tiles 2.1.2, not a configuration problem on my end.

It has been fixed and will be included in the 2.1.3 update:

See the tiles JIRA issue about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文