Apache Tiles 2.1 - Как предотвратить дублирование наследуемых атрибутов списка? - PullRequest
3 голосов
/ 29 мая 2009

Я работаю над проектом с использованием 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 Ответ

2 голосов
/ 05 июня 2009

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

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

См. Выпуск плиток JIRA *. 1007 *

...