Apache Tiles 2.1 - Как предотвратить дублирование унаследованных атрибутов списка?

Я работаю над проектом, используя 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 для каждого отдельного определения, если это возможно.


person TM.    schedule 29.05.2009    source источник


Ответы (1)


Оказывается, это действительно ошибка в плитках Apache 2.1.2, а не проблема конфигурации с моей стороны.

Это было исправлено и будет включено в обновление 2.1.3:

См. проблему с плитками JIRA.

person TM.    schedule 05.06.2009