template templates grails groovy gsp sitemesh

templates - template - grails gsp documentation



¿Hay algún buen tutorial para usar sitemesh en una aplicación de Grails? (4)

Bueno, puedo responder un poco:

Su primera y tercera pregunta están relacionadas, ya que no puede encadenar diseños con la metaetiqueta.

La página final debe tener una metaetiqueta como sugiere, pero si desea superponer un diseño sobre otro diseño, coloque la etiqueta ag: applyLayout en la parte superior del diseño secundario, señalando al elemento principal.

En tu edit.gsp, tendrías:

<meta name="layout" content="editTemplate" />

y en editTemplate.gsp, tendrías:

<g:applyLayout name="baseTemplate" > <!-- the html for the editTemplate --> </g:applyLayout>

así que edit.gsp usaría editTemplate.gsp, que usaría baseTemplate.gsp como un diseño base. Puede encadenarlos según sea necesario.

No he usado g: pageProperty en absoluto, así que no puedo arrojarle mejores ejemplos allí, lo siento.

Soy un experimentado desarrollador de Grails, pero la mayor parte de mi experiencia ha sido con el uso de griales para servir JSON / XML en una aplicación flexible y algunos sitios web HTML relativamente simples.

He estado profundizando en el uso de la integración de sitemesh en Grails y estoy luchando un poco para encontrar las mejores prácticas para algunas configuraciones más complejas, y tengo curiosidad por saber si hay algún buen tutorial o ejemplo. El sitio web original de Sitemesh no es tan útil ya que las etiquetas de las que habla no están expuestas directamente en griales.

Una búsqueda en Google muestra principalmente publicaciones antiguas de listas de correo y algunas cosas de sitemesh vainilla, lo que me está ayudando a avanzar un poco más, pero es una gran cantidad de prueba y error.

Entiendo completamente cómo funcionan las etiquetas básicas g: layoutTitle, g: layoutHead y g: layoutBody. Esos son fáciles y están bien documentados.

El tipo de cosas para las que me gustaría ver ejemplos:

  • g: applyLayout: la documentación sobre esto es débil y no entiendo completamente los usos sugeridos en los documentos principales. ¿En qué se diferencia esto de establecer la propiedad meta name=''layout'' content=''foo'' ?

  • g: pageProperty: algunos ejemplos mejores sobre cómo extraer y usar propiedades en la plantilla principal estableciendo los valores como metaetiquetas en la página que se está decorando. Los documentos de grails en pageProperty muestran solo el atributo onload del cuerpo que se está avanzando. Creo que también puedes usar valores de metaetiquetas aquí, ¿algo más?

  • ¿Puedes usar múltiples niveles de diseños de malla de sitio? Mi prueba parece hacerme pensar que no puedo, pero eso parece reducir la reutilización. Creo que la respuesta aquí es algún uso del g: applyLayout, pero es donde más estoy luchando.


Sitemesh junto con Grails es una característica muy poderosa. Cuanto más lo uso, más me encanta. Puede decorar cualquier parte de nuestro sitio web: puede tener un diseño para mensajes de error, información sobre herramientas, líneas de noticias, comentarios, etc., solo para indicar que puede hacer eso incluso en sus páginas y tener múltiples niveles de decoración (no <contenido> necesario):

/view/layout/inline-error-message.gsp

<span class="errorMessageInSomeFancyBox"> <span class="errorIcon"></span> <g:layoutBody /> <span>

/views/book/create.gsp

<%-- let''s decorate our error message with some fancy box --%> <g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>


Vea nuestra aplicación Rabbtor Showcase para ver algunos ejemplos muy buenos sobre

  • creando diseños anidados
  • renderizado de plantillas
  • aplicando diseños a partes específicas de una página

. Esta aplicación es en realidad un escaparate para nuestra herramienta Rabbtor que permite usar GSP fuera de Grails, pero las partes relacionadas con Sitmesh también son válidas para Grails.


g: pageProperty es una cosa muy poderosa, pero muy poco documentada. Digamos que en mi diseño especifico dónde poner algo de contenido como este:

<html> <body> <g:pageProperty name="page.header" /> </body>

Ahora en mi página puedo especificar algunos contenidos:

<content tag="header"> <!-- header --> </content>

Sitemesh tomará la etiqueta de contenido, independientemente de la posición real en el HTML de la página y la colocará donde necesita ir en el flujo del diseño.

Aún mejor, si dentro de mi página presento una plantilla que también especifica un área de contenido con una etiqueta de "encabezado", sobrescribirá la primera declaración, y será el contenido de la plantilla que se representará en el diseño final.