Frage

Ich bin mit Fliesen 2.0.6 als meine Vorlage Rahmen zusammen mit Streben 2.1.6. Ich bin eine einfache CMS-Seite zu schreiben und will die Benutzer lassen Sie den Titel der einzelnen HTML-Seite zu definieren.

Ich habe einen Titel Definition wie diese

    <definition name="base" template="/WEB-INF/jsp/templates/base.jsp">
        <put-attribute name="title" value=" "/>
        <put-attribute name="header" value="/WEB-INF/jsp/templates/header.jsp"/>  
        <put-attribute name="content" value="dummy"/>
        <put-attribute name="footer" value="/WEB-INF/jsp/templates/footer.jsp"/>   
        <put-attribute name="search" value="/WEB-INF/jsp/search.jsp"/>
    </definition>    
    <definition name="staticview" extends="base">
        <put-attribute name="title" value=" - Static"/>
        <put-attribute name="content" value="/WEB-INF/jsp/static/view.jsp"/>
    </definition>  

Statt dem Titel ein jsp zu machen, ist es eine Möglichkeit, außer Kraft setzen, um dynamisch den Titels (String) auf meinem header.jsp im späteren jsp Attribute, zum Beispiel view.jsp. Oder sogar ein Schritt weiter EL mit

<put-attribute name="title" value="%{title}"/>

und haben sie den Titel holen auf die Streben dynamisch OGNL.

Bitte raten

Vielen Dank im Voraus

War es hilfreich?

Lösung

In der Ansicht Seite müssen wir diese haben -

<title><tiles:getAsString name="title" /></title>

Vor finden Sie die Titel für die Seite bekommen. Außer, da wir der Seitentitel dynamisch sein, in der tiles.xml Konfiguration wollen, habe ich

<definition name="page1" extends="base">
    <put-attribute name="title" value="Page 1"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page1.jsp"/>
</definition>
<definition name="page2" extends="base">
    <put-attribute name="title" value="Page 2"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page2.jsp"/>
</definition>

Nun, das mag scheinen, wie die Eingabe wird es so aussehen, wie es statisch ist. Aber jedes Mal, wenn Sie die Seite zu sehen, sollte der Titel die gleichen sein für diese Seite. Gibt es einen besseren Ort, um diese Informationen zu haben, dass auf tiles.xml.

Für mich war es nicht der Titel selbst, aber ich brauchte verschiedene Seitenüberschriften. Ich wollte nicht an dem Context-Attribute suchen den Pfad der Seite zu erhalten und die Überschrift für die Seite zu bestimmen. Also, das für mich gearbeitet und hielt alles lose gekoppelt.

Dies funktioniert, wenn Sie eine andere dynamische Überschrift für jede Seite oder Ähnliches.

Andere Tipps

Halten Sie die Fliesen Definition wie folgt:

    <put-attribute name="title" value=""/>

Add Titel als Eigenschaft in Ihrer Action-Klasse.

Und in view.jsp Seite verwendet diese:

    <tiles:insertDefinition name="staticview">
        <tiles:putAttribute name="title"> 
            ${title} <%--OR, <s:property value="title"/>--%>
        </tiles:putAttribute>
        <%--Remainning content--%>
    </tiles:insertDefinition>

Ich habe versucht, und es funktioniert.

Code1

<tiles:putAttribute name="title"> 
          You String
</tiles:putAttribute>

Code 2

<tiles:insertAttribute name="title" />

Aber code1 vor code2 ausführen muss.

Die beste Lösung ist meiner Meinung nach expression zu verwenden, anstatt value in der Fliesen-Definition und übergibt $ {title}. Aber Sie würden es in jeder Ansicht explizit tun, leider. Mehr unter http: // symfony-Welt. blogspot.com/2013/02/dynamic-attribute-values-with-apache.html

Sie hat diese einfache Lösung an anderer Stelle:

Tiles Attributdefinition wie gewohnt:

 <put-attribute name="title"  value="welcome.title"/>

Auf einer jsp Seite wird das Attribut zuerst importiert und dann kann es mit Streben Tags verwendet werden:

<tiles:importAttribute name="title" />
<title><s:text name="%{#attr['title']}"/></title> 

ich den Titel auf die Anforderung in der Action-Klasse hinzufügen, hier ist mein JSP-Code für die Vorlage (Fliese 1):

<title>
    <tiles:getAsString name="title"/>
    <%-- add additional title (if found) --%>
    <logic:present scope="request" name="title"><bean:write scope="request" name="title"/></logic:present>
</title>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top