2009-10-11 5 views
6

J'utilise des carreaux 2.0.6 comme ma structure de modèle avec des entretoises 2.1.6. J'écris une simple page cms et je veux laisser l'utilisateur définir le titre de chaque page html.struts 2, tiles 2 titre dynamique

J'ai une définition de titre comme celui-ci

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

Au lieu de faire le titre d'un jsp, est-il un moyen de passer outre dynamiquement le titre (String) sur mon header.jsp dans l'attribut plus tard jsp, pour exemple view.jsp. Ou même 1 pas plus loin en utilisant EL

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

et de lui faire prendre le titre sur les struts ognl dynamiquement.

S'il vous plaît conseiller

Merci à l'avance

Répondre

4

Dans la page vue que nous devons avoir ce -

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

ci-dessus vous obtenez le titre de la page. Sauf, puisque nous voulons que le titre de la page soit dynamique, dans la configuration tiles.xml, j'ai ajouté

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

Maintenant, cela peut sembler taper fera ressembler à elle est statique. Mais chaque fois que vous affichez cette page, le titre doit être le même pour cette page. Quel meilleur endroit pour avoir cette information que sur tiles.xml. Pour moi, ce n'était pas le titre lui-même, mais j'avais besoin de titres de page différents. Je ne voulais pas regarder l'attribut de contexte pour obtenir le chemin de la page et déterminer l'en-tête de la page. Donc, cela a fonctionné pour moi et gardé tout vaguement couplé.

Cela fonctionne si vous voulez un en-tête dynamique différent pour chaque page ou quelque chose de similaire.

+0

+1. Mais en ce qui concerne le meilleur endroit pour mettre cette information, je souhaite que le titre puisse être tiré d'un paquet pour être internationalisé. Cette route signifie que vous avez besoin d'une définition de mosaïque différente pour chaque langue. – bphilipnyc

+0

@bphilipnyc - Je suis totalement d'accord. Connaissez-vous un moyen de rendre cette internationalisation amicale? – vivekmore

+0

Malheureusement, non. Pour notre projet, j'ai évité de mettre des titres dans Tiles pour cette raison (j'appelle le paquet de messages de la couche service pour obtenir un titre internationalisé). Related posts: http://stackoverflow.com/questions/8061953/tiles-struts-el-expressions – bphilipnyc

-1

-je ajouter le titre à la demande dans la classe d'action, voici mon code JSP pour le modèle (tuiles 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

garder le définition de tuiles comme ceci:

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

Ajouter titre en tant que propriété de votre classe d'action.

Et dans la page view.jsp utilisez:

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

J'ai essayé, et cela fonctionne.

Code1

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

code 2

<tiles:insertAttribute name="title" /> 

Mais code1 doit exécuter avant code2.

+0

Pouvez-vous rendre "You string" dynamique, comme pouvez-vous mettre du code là plutôt qu'une chaîne statique? (Préférable un code pouvant extraire le titre de la page à partir d'un fichier de ressources) – user1884155

0

trouvés cette solution simple ailleurs:

Tiles définition de l'attribut comme d'habitude:

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

Sur une page jsp l'attribut est d'abord importé puis il peut être utilisé avec des balises Struts:

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

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

Questions connexes