ApacheTiles2.1を使用したプロジェクトに取り組んでいます。
リスト属性を使用してテンプレートを拡張すると、それらのリストアイテムの複製が作成されるという問題が発生しています...継承のレベルごとに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>
この第2レベルの拡張機能は、これを生成します。
<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>
「元の」リスト属性は、その定義がリスト属性に何も追加しない場合でも、拡張定義ごとに1回複製されます。
私は自分の定義を非常にドライに保とうとしているので、場合によっては4〜5レベルの継承があります。したがって、 「最も低い」定義だけが別のcssファイルをリストに追加する唯一の定義である場合でも、「常に使用される」cssファイルは4〜5回複製されます。
これはタイルのバグですか、それとも単に意図しない方法でタイルを使用していますか?単に排除せずにこの問題を解決できる方法はありinherit="true"
ますか?可能であれば、すべての定義に同じ「コア」cssファイルとjavascriptファイルを記述しないようにしたいと思います。