net mvc framework asp java model-view-controller master-pages

java - framework - mvc c#



ASP.NET Master Pages equivalente en Java (3)

He usado sitemesh en proyectos anteriores y es bastante fácil de configurar. Básicamente, creas decoradores que son equivalentes de páginas maestras. A continuación, define qué páginas secundarias usan qué decoradores. Vea la introducción a sitemesh para más información.

¿Cuál sería el equivalente de Master Pages en el mundo de desarrollo web de 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 subsiguientes derivan de la plantilla y anular las regiones de contenido, similar a las páginas maestras.

¡Cualquier ejemplo sería genial!


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

Las páginas maestras dan la capacidad de definir páginas en términos de contenido ranurado 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 da algunos ejemplos básicos utilizando Tiles y JSP para implementar algo similar con Struts, un framework web de Java. En este caso, la funcionalidad de Páginas maestras 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 usado 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 tus propósitos. Su funcionalidad de creación de plantillas implica crear un componente y poner todas las marcas comunes en eso. Un ejemplo es en http://www.infoq.com/articles/tapestry5-intro .

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


También debes ver Facelets ; hay un buen artículo introductorio sobre 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 ser anulado.

Para completar la plantilla de Facelets en otra página, empiezas con un elemento <ui:composition/> que apunta 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:composition/> , utiliza los elementos <ui:define/> para anular los valores predeterminados de la plantilla, de forma similar a como se usa una etiqueta <asp:Content/> . 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 rendirá como:

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

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

(Editado para proporcionar más información).