2009-10-11 10 views
6

Sto usando le tessere 2.0.6 come framework del mio modello insieme a puntone 2.1.6. Sto scrivendo una semplice pagina cms e voglio lasciare all'utente la definizione del titolo di ogni pagina html.puntoni 2, piastrelle 2 titolo dinamico

Ho una definizione titolo come questo

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

Invece di fare il titolo di un jsp, c'è un modo per ignorare in modo dinamico il titolo (String) sul mio header.jsp nell'attributo jsp più tardi, per esempio view.jsp. O anche 1 ulteriore passo con EL

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

e farlo riprendere dinamicamente il titolo sui montanti.

Si prega di avvisare

Grazie in anticipo

risposta

4

Nella pagina di visualizzazione abbiamo bisogno di avere questo -

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

di cui sopra sarà ottenere il titolo per la pagina. Tranne, poiché vogliamo che il titolo della pagina per essere dinamica, nella configurazione tiles.xml, ho aggiunto

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

Ora questo può sembrare come digitandolo farà sembrare che è statico. Ma ogni volta che visualizzi quella pagina, il titolo dovrebbe essere lo stesso per quella pagina. Quale posto migliore per avere questa informazione su tiles.xml.

Per me non era il titolo stesso, ma avevo bisogno di intestazioni di pagine diverse. Non volevo esaminare l'attributo context per ottenere il percorso della pagina e determinare l'intestazione della pagina. Quindi, questo ha funzionato per me e ha tenuto tutto accoppiato liberamente.

Questo funziona se si desidera un'intestazione dinamica diversa per ogni pagina o qualcosa di simile.

+0

+1. Ma per quanto riguarda il posto migliore dove mettere queste informazioni, vorrei che il titolo potesse essere estratto da un pacchetto per essere internazionalizzato. Questo percorso significa che avresti bisogno di una diversa definizione di tessere per ogni lingua. – bphilipnyc

+0

@bphilipnyc - Sono assolutamente d'accordo. Conosci un modo per rendere amichevole questa internazionalizzazione? – vivekmore

+0

Purtroppo no. Per il nostro progetto, ho evitato di inserire titoli in Tiles per questo motivo (chiamo il bundle di messaggi dal livello di servizio per ottenere un titolo internazionalizzato). Post correlati: http://stackoverflow.com/questions/8061953/tiles-struts-el-expressions – bphilipnyc

-1

ho aggiungere il titolo alla richiesta nella classe azione, ecco il mio codice JSP per il modello (piastrelle 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> 
1

mantenere il definizione piastrelle in questo modo:

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

Aggiungere titolo come proprietà di nella classe di azione.

e in uso pagina view.jsp questo:

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

Ho provato questo, e funziona.

Code1

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

Codice 2

<tiles:insertAttribute name="title" /> 

Ma code1 deve eseguire prima di code2.

+0

È possibile rendere dinamico "stringa", come si può inserire il codice anziché una stringa statica? (Preferibile un codice che può recuperare il titolo della pagina da un file di risorse) – user1884155

0

trovato questa semplice soluzione altrove:

Tiles attribuiscono definizione come al solito:

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

Su una pagina jsp l'attributo viene prima importata e quindi può essere utilizzato con puntoni tags:

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

Altrove http://stackoverflow.com/q/13920587/1700321? –