2009-10-11 10 views
6

Estoy utilizando azulejos 2.0.6 como mi marco de plantilla junto con puntales 2.1.6. Estoy escribiendo una página simple de cms y quiero que el usuario defina el título de cada página html.puntales 2, azulejos 2 título dinámico

que tienen una definición título como este

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

En lugar de hacer el título de una JSP, hay una manera de anular dinámicamente el título (String) en mi header.jsp en el atributo JSP después, para ejemplo view.jsp. O incluso un paso más utilizando EL

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

y hacer que recoja el título en los struts ognl dinámicamente.

Por favor, asesorar

Gracias de antemano

Respuesta

4

En la página de vista tenemos que tener esto -

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

encima le conseguirá el título de la página. A excepción, ya que queremos que el título de la página sea dinámica, en la configuración tiles.xml, añadí

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

Ahora bien, esto puede parecer similar a hacerlo hará que parezca que es estático. Pero cada vez que vea esa página, el título debería ser el mismo para esa página. ¿Qué mejor lugar para tener esta información que en tiles.xml?

Para mí no era el título en sí, pero necesitaba encabezados de página diferentes. No quería ver el atributo de contexto para obtener la ruta de la página y determinar el título de la página. Por lo tanto, esto funcionó para mí y mantuvo todo vagamente acoplado.

Esto funciona si desea un encabezado dinámico diferente para cada página o algo similar.

+0

+1. Pero en cuanto a qué mejor lugar para poner esa información, me gustaría que el título pudiera ser extraído de un paquete para ser internacionalizado. Esta ruta significa que necesitarías una definición de mosaico diferente para cada idioma. – bphilipnyc

+0

@bphilipnyc - Estoy totalmente de acuerdo. ¿Conoces una manera de hacer que esta internacionalización sea amigable? – vivekmore

+0

Lamentablemente, no. Para nuestro proyecto, evité poner títulos en Tiles por este motivo (llamé al paquete de mensajes desde la capa de servicio para obtener un título internacionalizado). Publicación relacionada: http://stackoverflow.com/questions/8061953/tiles-struts-el-expressions – bphilipnyc

-1

que añadir el título a la solicitud de la clase de acción, aquí está mi código JSP para la plantilla (baldosas 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

mantener el definición azulejos de la siguiente manera:

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

Añadir título como una propiedad de en su clase de acción.

y en uso la página view.jsp esto:

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

yo probamos este, y funciona.

Code1

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

Código 2

<tiles:insertAttribute name="title" /> 

Pero Code1 debe ejecutar antes de Código2.

+0

¿Se puede hacer que "You string" sea dinámico, como se puede poner el código allí en lugar de una cadena estática? (Es preferible un código que puede recuperar el título de la página desde un archivo de recursos) – user1884155

0

han encontrado esta sencilla solución en otra parte:

Azulejos definición del atributo como de costumbre:

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

En una página JSP el atributo se importó por primera vez y luego se pueden utilizar con puntales tags:

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

En otro lugar http://stackoverflow.com/q/13920587/1700321? –

Cuestiones relacionadas