Apache Tiles 2.1 - Wie um zu verhindern geerbt Liste Attribute von dupliziert zu werden?

StackOverflow https://stackoverflow.com/questions/924366

  •  06-09-2019
  •  | 
  •  

Frage

Ich arbeite an einem Projekt mit Apache Tiles 2.1 .

Ich laufe in ein Problem, bei der Vorlage mit Liste erstreckt Attributen wird Duplikate dieser Listenelemente ... einen Satz von Duplikaten für jede Ebene der Vererbung zu schaffen.

Als Beispiel ist hier die Basisdefinition und die Seite wäre es produzieren:

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

Dies würde html wie diese produziert, wie zu erwarten:

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

Wenn ich verlängern die Definiton wie folgt aus:

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

Auch hier, wie erwartet, ich dieses Ergebnis erhalten:

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

Wenn ich jedoch die vorherigen erweitern, beginnen die Probleme:

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

Diese zweite Ebene Erweiterung ergibt dies:

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

Die „original“ listet Attribute, die einmal erhalten dupliziert für jede erweiterte Definition geerbt werden, auch wenn diese Definition nichts zur Liste-Attribut hinzufügen.

Ich versuche, meine Definitionen sehr trocken zu halten, so dass ich 4-5 Vererbungsebene in einigen Fällen. So ist die „immer verwendet“ CSS-Dateien dupliziert bekommen 4-5 mal , auch wenn nur die „niedrigste“ Definition ist der einzige andere CSS-Datei zu der Liste hinzuzufügen.

Ist das ein Fehler in Fliesen, oder bin ich einfach sie in einer Weise verwenden, die nicht beabsichtigt war? Gibt es irgendeine Weise, die ich dieses Problem ohne einfach die Beseitigung der inherit="true" beheben könnte? Ich möchte die gleichen „Kern“ CSS und JavaScript-Dateien auf jeder einzelne Definition zu vermeiden, schreiben, wenn möglich.

War es hilfreich?

Lösung

Es stellte sich heraus, dass dies tatsächlich ein Fehler in Apache Fliesen 2.1.2, nicht ein Konfigurationsproblem auf mein Ende.

Es wird behoben und wird in dem 2.1.3-Update enthalten sein:

Siehe Fliesen JIRA Ausgabe über sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top