2008-08-25 4 views
6

¿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?ASP.NET Master Pages equivalente en Java

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

¡Cualquier ejemplo sería genial!

Respuesta

4

Primero, el equivalente a 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 framework 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 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.)

Tapiz es una pila web más completa que Tile, y probablemente sea adecuada para sus propósitos. Su funcionalidad de creación de plantillas implica crear un componente y poner todas las marcas comunes en eso. Un ejemplo es http://www.infoq.com/articles/tapestry5-intro.

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

12

También debe consultar Facelets; hay un good introductory article 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 ser anulado.

Para rellenar la plantilla Facelets en otra página, comienza 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 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.

lo tanto, para ponerlo todo junto ...

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 página.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 convertirá como:

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

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

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

2

he utilizado 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. Ver introduction to sitemesh para más información.