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