Pregunta

Estoy utilizando baldosas 2.0.6 como mi marco plantilla junto con puntales 2.1.6. Estoy escribiendo una página sencilla cms y quiero dejar al usuario definir el título de cada página HTML.

Tengo 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 posterior, por ejemplo view.jsp. O incluso 1 paso más allá utilizando EL

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

y tiene que recoger el título de los puntales OGNL dinámicamente.

Por favor, asesorar

Gracias de antemano

¿Fue útil?

Solución

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

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

Por encima le dará 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 debe 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 diferentes encabezados de página. No quería mirar 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 imprecisa.

Esto funciona si quieres un título dinámica diferente para cada página o algo similar.

Otros consejos

Mantener la definición azulejos de la siguiente manera:

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

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

Y en la página view.jsp utilizar esto:

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

He intentado esto, 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.

La mejor solución en mi opinión es el uso de expression en lugar de value en la definición de baldosas y pasar $ {title}. Sin embargo, habría que hacerlo en cada vista de forma explícita, por desgracia. Ver más en http: // Symfony-mundo. blogspot.com/2013/02/dynamic-attribute-values-with-apache.html

Encontrados 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 es el atributo primera importado y entonces se puede utilizar con etiquetas puntales:

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

agrego el título de la solicitud en la clase de la acción, aquí está mi código JSP para la plantilla (azulejos 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top