Pregunta

¿Cuál sería el equivalente de Master Pages en el mundo del desarrollo web Java? He oído hablar de Tiles, Tapestry y Velocity, pero no sé nada sobre ellos. ¿Son tan fáciles de usar como las páginas maestras?

Quiero algo tan fácil como configurar una plantilla y las páginas siguientes se derivan de la plantilla y anulan las regiones de contenido, similar a las páginas maestras.

¡Cualquier ejemplo sería genial!

¿Fue útil?

Solución

Primero, el equivalente de ASP.Net en Java será un marco web, como los que mencionas (Tiles, Tapestry y Velocity).

Las páginas maestras ofrecen la posibilidad de definir páginas en términos de contenido en una plantilla maestra.

Las páginas maestras son una característica de ASP.Net (el marco web .Net), por lo que está buscando una característica similar a las páginas maestras en un marco web Java.

http://tiles.apache.org/framework/tutorial/basic /pages.html ofrece algunos ejemplos básicos del uso de Tiles y JSP para implementar algo similar con Struts, un marco web Java. En este caso, la funcionalidad de Master Pages es un complemento en la parte superior de Struts.

Velocity es un motor de plantillas genérico, no especializado para páginas web y definitivamente más complicado de lo que necesita. (Lo he visto utilizado para la generación de código).

Tapestry es más una pila web con todas las funciones que Tile, y probablemente sea bueno para sus propósitos. Su funcionalidad de plantilla implica crear un componente y poner todo el marcado común en eso. Un ejemplo está en http://www.infoq.com/articles/tapestry5-intro.

Los detalles de esto difieren según el marco web Java que elija.

Otros consejos

También debe consultar Facelets ; hay un buen artículo introductorio en DeveloperWorks.

La etiqueta Facelets <ui:insert/> es comparable a la etiqueta ASP.NET <asp:ContentPlaceHolder/> utilizada en las páginas maestras; le permite proporcionar contenido predeterminado para esa área de la página, pero esto puede anularse.

Para llenar la plantilla Facelets en otra página, comience con un elemento <ui:composition/> que apunte al archivo de plantilla. Esto es más o menos equivalente a declarar el atributo MasterPageFile en una página ASP.NET.

Dentro del elemento <ui:define/>, utiliza elementos <asp:Content/> para anular los valores predeterminados de la plantilla, de forma similar a la forma en que se usa una etiqueta <=>. Estos elementos pueden contener cualquier tipo de contenido, desde cadenas simples hasta elementos JSF.

Entonces, para unir todo ...

En master.xhtml :

<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->

En page.xhtml :

<ui:composition template="/WEB-INF/templates/master.xhtml">
  <ui:define name="AreaOne">Here is some new content</ui:define>
  <ui:define name="AreaTwo">
    <p>Some new content here too</p>
  </ui:define>
</ui:composition>

Y esto se representará como:

<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->

También obtiene otros beneficios con Facelets, como la capacidad de reutilizar los componentes de la página con datos diferentes.

(Editado para proporcionar más información)

He usado sitemesh en proyectos anteriores y es bastante fácil de configurar. Básicamente, crea decoradores que son equivalentes a las páginas maestras. Luego define qué páginas secundarias usan qué decoradores. Consulte introducción a sitemesh para obtener más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top