<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maro</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maro"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Maro"/>
		<updated>2026-05-17T00:22:47Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6911</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6911"/>
				<updated>2013-08-30T14:30:19Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Font-face en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link] lo explica con más detenimiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Inherit en IE7+:'''&lt;br /&gt;
 div {&lt;br /&gt;
      color:inherit;&lt;br /&gt;
      //color: expression(this.parentNode.currentStyle['color']);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
De esta forma nuestro elemento puede heredar el color del elemento padre. El atributo a heredar es el que se encuentra dentro de &amp;quot;currentStyle&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6893</id>
		<title>Botones Redes Sociales</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6893"/>
				<updated>2013-08-09T20:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Google Plus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Muchas veces queremos compartir una página web o algún contenido web en las distintas redes sociales. Es por esto que cada red social provee botones que se insertan&lt;br /&gt;
en nuestra página de forma rápida y simple. A continuación veremos qué código hmtl insertar para tener nuestra página web un botón de Facebook, Twitter &lt;br /&gt;
y Google Plus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facebook == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://developers.facebook.com/docs/reference/plugins/like/&lt;br /&gt;
&lt;br /&gt;
Facebook tiene varias formas de implementarlo, pero la que mas sencillo nos resulto en nuestro caso con un iframe.&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;iframe scrolling=&amp;quot;no&amp;quot; frameborder=&amp;quot;0&amp;quot; allowtransparency=&amp;quot;true&amp;quot; style=&amp;quot;border:none; overflow:hidden; width:140px; height:21px;&amp;quot; src=&amp;quot;http://www.facebook.com/plugins/like.php?href=http://www.comunidadfusa.com.ar&amp;amp;locale=es_ES&amp;amp;layout=button_count&amp;amp;show_faces=true&amp;amp;width=140&amp;amp;action=like&amp;amp;font=arial&amp;amp;colorscheme=light&amp;amp;height=21&amp;quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Twitter ==&lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://twitter.com/about/resources/buttons&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;a href=&amp;quot;https://twitter.com/share&amp;quot; class=&amp;quot;twitter-share-button&amp;quot;  data-lang=&amp;quot;es&amp;quot; data-count=&amp;quot;none&amp;quot;&amp;gt;Twittear&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Plus == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 8+)&lt;br /&gt;
Documentacion: https://developers.google.com/+/web/+1button/&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo: &lt;br /&gt;
 &amp;lt;!-- Ubicar este tag donde queremos que el botón +1 de Google se renderice. --&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;g-plusone&amp;quot; data-size=&amp;quot;medium&amp;quot; data-annotation=&amp;quot;none&amp;quot; data-href=&amp;quot;http://www.comunidadfusa.com.ar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Situar este tag después del botón +1 de Google. --&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
   window.___gcfg = {lang: 'es-419'};&lt;br /&gt;
 &lt;br /&gt;
   (function() {&lt;br /&gt;
  var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;&lt;br /&gt;
 po.src = 'https://apis.google.com/js/plusone.js';&lt;br /&gt;
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);&lt;br /&gt;
   })();&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Observaciones ==&lt;br /&gt;
Tener en cuenta que si en el botón de Facebook agregamos una url del sitio a compartir que no contenga punto (url no válida), éste botón no se visualizará. Asi mismo, el botón de Google Plus se mostrará pero al hacer click en él, se visualizará con un símbolo de advertencia.&lt;br /&gt;
&lt;br /&gt;
El mas sencillo para implementar nos resultó el de twitter porque este resuelve todo solo y no necesita ponerle la url ya que la detecta de la página en la que estamos agregando el botón. Aparte de ser el mas compatible con todos los navegadores.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6892</id>
		<title>Botones Redes Sociales</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6892"/>
				<updated>2013-08-09T20:14:42Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Twitter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Muchas veces queremos compartir una página web o algún contenido web en las distintas redes sociales. Es por esto que cada red social provee botones que se insertan&lt;br /&gt;
en nuestra página de forma rápida y simple. A continuación veremos qué código hmtl insertar para tener nuestra página web un botón de Facebook, Twitter &lt;br /&gt;
y Google Plus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facebook == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://developers.facebook.com/docs/reference/plugins/like/&lt;br /&gt;
&lt;br /&gt;
Facebook tiene varias formas de implementarlo, pero la que mas sencillo nos resulto en nuestro caso con un iframe.&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;iframe scrolling=&amp;quot;no&amp;quot; frameborder=&amp;quot;0&amp;quot; allowtransparency=&amp;quot;true&amp;quot; style=&amp;quot;border:none; overflow:hidden; width:140px; height:21px;&amp;quot; src=&amp;quot;http://www.facebook.com/plugins/like.php?href=http://www.comunidadfusa.com.ar&amp;amp;locale=es_ES&amp;amp;layout=button_count&amp;amp;show_faces=true&amp;amp;width=140&amp;amp;action=like&amp;amp;font=arial&amp;amp;colorscheme=light&amp;amp;height=21&amp;quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Twitter ==&lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://twitter.com/about/resources/buttons&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;a href=&amp;quot;https://twitter.com/share&amp;quot; class=&amp;quot;twitter-share-button&amp;quot;  data-lang=&amp;quot;es&amp;quot; data-count=&amp;quot;none&amp;quot;&amp;gt;Twittear&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Plus == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 8+)&lt;br /&gt;
Documentacion: https://developers.google.com/+/web/+1button/&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo: &lt;br /&gt;
 &amp;lt;!-- Ubicar este tag donde queremos que el botón +1 de Google se renderice. --&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;g-plusone&amp;quot; data-size=&amp;quot;medium&amp;quot; data-annotation=&amp;quot;none&amp;quot; data-href=&amp;quot;http://www.comunidadfusa.com.ar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Situar este tag después del botón +1 de Google. --&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
   window.___gcfg = {lang: 'es-419'};&lt;br /&gt;
 &lt;br /&gt;
   (function() {&lt;br /&gt;
  var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;&lt;br /&gt;
 po.src = 'https://apis.google.com/js/plusone.js';&lt;br /&gt;
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);&lt;br /&gt;
   })();&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que si en el botón de Facebook agregamos una url del sitio a compartir que no contenga punto (url no válida), éste botón no se visualizará. Asi mismo, el botón de Google Plus se mostrará pero al hacer click en él, se visualizará con un símbolo de advertencia.&lt;br /&gt;
&lt;br /&gt;
El mas sencillo para implementar nos resultó el de twitter porque este resuelve todo solo y no necesita ponerle la url ya que la detecta de la página en la que estamos agregando el botón. Aparte de ser el mas compatible con todos los navegadores.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6891</id>
		<title>Botones Redes Sociales</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Botones_Redes_Sociales&amp;diff=6891"/>
				<updated>2013-08-09T20:12:55Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con 'Muchas veces queremos compartir una página web o algún contenido web en las distintas redes sociales. Es por esto que cada red social provee botones que se insertan en nuestra…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Muchas veces queremos compartir una página web o algún contenido web en las distintas redes sociales. Es por esto que cada red social provee botones que se insertan&lt;br /&gt;
en nuestra página de forma rápida y simple. A continuación veremos qué código hmtl insertar para tener nuestra página web un botón de Facebook, Twitter &lt;br /&gt;
y Google Plus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Facebook == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://developers.facebook.com/docs/reference/plugins/like/&lt;br /&gt;
&lt;br /&gt;
Facebook tiene varias formas de implementarlo, pero la que mas sencillo nos resulto en nuestro caso con un iframe.&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;iframe scrolling=&amp;quot;no&amp;quot; frameborder=&amp;quot;0&amp;quot; allowtransparency=&amp;quot;true&amp;quot; style=&amp;quot;border:none; overflow:hidden; width:140px; height:21px;&amp;quot; src=&amp;quot;http://www.facebook.com/plugins/like.php?href=http://www.comunidadfusa.com.ar&amp;amp;locale=es_ES&amp;amp;layout=button_count&amp;amp;show_faces=true&amp;amp;width=140&amp;amp;action=like&amp;amp;font=arial&amp;amp;colorscheme=light&amp;amp;height=21&amp;quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Twitter ==&lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 7+)&lt;br /&gt;
Documentacion: https://twitter.com/about/resources/buttons&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo:&lt;br /&gt;
 &amp;lt;div&amp;gt;&amp;lt;a href=&amp;quot;https://twitter.com/share&amp;quot; class=&amp;quot;twitter-share-button&amp;quot;  data-lang=&amp;quot;es&amp;quot; data-count=&amp;quot;none&amp;quot;&amp;gt;Twittear&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Plus == &lt;br /&gt;
(Soportado por Chrome, Firefox 3.6+, Safari, Internet Explorer 8+)&lt;br /&gt;
Documentacion: https://developers.google.com/+/web/+1button/&lt;br /&gt;
&lt;br /&gt;
Ejemplo de codigo: &lt;br /&gt;
 &amp;lt;!-- Ubicar este tag donde queremos que el botón +1 de Google se renderice. --&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;g-plusone&amp;quot; data-size=&amp;quot;medium&amp;quot; data-annotation=&amp;quot;none&amp;quot; data-href=&amp;quot;http://www.comunidadfusa.com.ar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Situar este tag después del botón +1 de Google. --&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
   window.___gcfg = {lang: 'es-419'};&lt;br /&gt;
 &lt;br /&gt;
   (function() {&lt;br /&gt;
  var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;&lt;br /&gt;
 po.src = 'https://apis.google.com/js/plusone.js';&lt;br /&gt;
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);&lt;br /&gt;
   })();&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tener en cuenta que si en el botón de Facebook agregamos una url del sitio a compartir que no contenga punto (url no válida), éste botón no se visualizará. Asi mismo, el botón de Google Plus se mostrará pero al hacer click en él, se visualizará con un símbolo de advertencia.&lt;br /&gt;
&lt;br /&gt;
El mas sencillo para implementar nos resultó el de twitter porque este resuelve todo solo y no necesita ponerle la url ya que la detecta de la página en la que estamos agregando el botón. Aparte de ser el mas compatible con todos los navegadores.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6890</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6890"/>
				<updated>2013-08-09T20:06:04Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6889</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6889"/>
				<updated>2013-08-06T19:41:05Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Font-face en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link] lo explica con más detenimiento.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6888</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6888"/>
				<updated>2013-08-06T19:40:40Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Font-face en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [[http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link]] lo explica con más detenimiento.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6887</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6887"/>
				<updated>2013-08-06T19:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''''''&lt;br /&gt;
Font-face en IE7+:''''''&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [[http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link]] lo explica con más detenimiento.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6886</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6886"/>
				<updated>2013-08-06T19:39:53Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Font-face en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [[http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link]] lo explica con más detenimiento.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6885</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6885"/>
				<updated>2013-08-06T19:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Seteando zoom: 1 se activa una propiedad interna de IE llamada hasLayout que junto con el display inline solucionan el problema. El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Font-face en IE7+:&lt;br /&gt;
&lt;br /&gt;
 @font-face {&lt;br /&gt;
             font-family: 'NombreFuenteWeb';&lt;br /&gt;
             src: url('NombreFuenteWeb.eot?') format('eot'),url('NombreFuenteWeb.ttf') format('truetype');&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Una aclaración importante es que el nombre de la font-family no puede superar los 31 caracteres porque sino IE la ignora. En el siguiente [[http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ link]] lo explica con más detenimiento.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6884</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6884"/>
				<updated>2013-08-06T19:25:23Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoría de los navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea también compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     opacity: 0.5;&lt;br /&gt;
     filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
     display: inline-block; &lt;br /&gt;
     zoom: 1; &lt;br /&gt;
     *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 9. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
     max-width: 200px;&lt;br /&gt;
     *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
     max-height: 200px;&lt;br /&gt;
     *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6883</id>
		<title>Compatibilidades CSS en Internet Explorer</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Compatibilidades_CSS_en_Internet_Explorer&amp;diff=6883"/>
				<updated>2013-08-06T19:16:06Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con 'Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoria de navegadores para IE7 e IE8 no funcionan.  Este post es una recopilación de sol…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seguramente te pasó que al momento de estilar una web los estilos que funcionan en la mayoria de navegadores para IE7 e IE8 no funcionan. &lt;br /&gt;
Este post es una recopilación de soluciones que son muy útiles para que nuestra web sea tambien compatible para IE7+.&lt;br /&gt;
&lt;br /&gt;
'''Opacity en IE7+:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
 opacity: 0.5;&lt;br /&gt;
 filter: Alpha(Opacity=50); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Display inline-block en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
 display: inline-block; &lt;br /&gt;
 zoom: 1; &lt;br /&gt;
 *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 9. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Max width y Max height en IE7+:'''&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
 max-width: 200px;&lt;br /&gt;
 *width: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);.&lt;br /&gt;
 max-height: 200px;&lt;br /&gt;
 *height: expression(document.body.clientWidth&amp;gt;199?&amp;quot;200px&amp;quot;:&amp;quot;auto&amp;quot;);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6882</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6882"/>
				<updated>2013-08-06T19:07:04Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6879</id>
		<title>Tooltip de ayuda para un componente en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6879"/>
				<updated>2013-08-02T17:46:55Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción ==&lt;br /&gt;
&lt;br /&gt;
A continuación se explicará como realizar un tooltip de ayuda para [[Liferay Portal]].&lt;br /&gt;
Para empezar, es correcto aclarar que el tooltip de ayuda no es un componente con estructura y template. Este componente tiene solo una estructura y el renderizado queda a manos del componente que lo utiliza.&lt;br /&gt;
Su funcionalidad principal es mostrar un tooltip de ayuda y con contenido personalizable.&lt;br /&gt;
Tiene soporte para IE7+/Firefox/Chrome/Safari. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Como mencioné anteriormente, el tooltip de ayuda solo cuenta con una estructura. En la implementación elegida, la misma está compuesta por un solo campo de texto enriquecido que será el que contiene la información del tooltip.&lt;br /&gt;
El componente que quiera utilizar dicho tooltip tiene que heredar la estructura del tooltip de ayuda y además tiene que cambiar su forma de renderizarse adicionando un div donde guarde la informacion del campo de texto enriquecido.&lt;br /&gt;
Por último, para convertir en un tooltip al div anterior, utilizamos una libreria js llamada [http://qtip2.com/ qtip2]. La misma nos permite de una forma muy facil crear un tooltip altamente personalizable.&lt;br /&gt;
Como particularidad del estilado con lo único que nos encontramos es que para IE7 y IE8 no  es soportado el estilo display: inline-block. La solucion es agregar los siguientes estilos: &lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
 display: inline-block; &lt;br /&gt;
 zoom: 1; &lt;br /&gt;
 *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
El * (asterisco) hace que una propiedad sólo se aplique en los navegadores de la familia Internet Explorer anteriores a la versión 8.&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El tooltip de ayuda nos provee una funcionalidad que otro componente puede utilizar. Esta separación de tooltip de ayuda y componente nos permite una gran reutilizacion de codigo ya que podemos usar el mismo tooltip de ayuda en todos los componentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6878</id>
		<title>Tooltip de ayuda para un componente en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6878"/>
				<updated>2013-08-02T14:47:55Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción ==&lt;br /&gt;
&lt;br /&gt;
A continuación se explicará como realizar un tooltip de ayuda para [[Liferay Portal]].&lt;br /&gt;
Para empezar, es correcto aclarar que el tooltip de ayuda no es un componente con estructura y template. Este componente tiene solo una estructura y el renderizado queda a manos del componente que lo utiliza.&lt;br /&gt;
Su funcionalidad principal es mostrar un tooltip de ayuda y con contenido personalizable.&lt;br /&gt;
Tiene soporte para IE7+/Firefox/Chrome/Safari. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Como mencioné anteriormente, el tooltip de ayuda solo cuenta con una estructura. En la implementación elegida, la misma está compuesta por un solo campo de texto enriquecido que será el que contiene la información del tooltip.&lt;br /&gt;
El componente que quiera utilizar dicho tooltip tiene que heredar la estructura del tooltip de ayuda y además tiene que cambiar su forma de renderizarse adicionando un div donde guarde la informacion del campo de texto enriquecido.&lt;br /&gt;
Por último, para convertir en un tooltip al div anterior, utilizamos una libreria js llamada [http://qtip2.com/ qtip2]. La misma nos permite de una forma muy facil crear un tooltip altamente personalizable.&lt;br /&gt;
Como particularidad del estilado con lo único que nos encontramos es que para IE7 y IE8 no  es soportado el estilo display: inline-block. La solucion es agregar los siguientes estilos: &lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
 display: inline-block; zoom: 1; *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El tooltip de ayuda nos provee una funcionalidad que otro componente puede utilizar. Esta separación de tooltip de ayuda y componente nos permite una gran reutilizacion de codigo ya que podemos usar el mismo tooltip de ayuda en todos los componentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6877</id>
		<title>Tooltip de ayuda para un componente en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Tooltip_de_ayuda_para_un_componente_en_Liferay&amp;diff=6877"/>
				<updated>2013-08-02T14:40:41Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con '== Introducción ==  Para empezar, es correcto aclarar que el tooltip de ayuda no es un componente con estructura y template. Este componente tiene solo una estructura y el rend…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Para empezar, es correcto aclarar que el tooltip de ayuda no es un componente con estructura y template. Este componente tiene solo una estructura y el renderizado &lt;br /&gt;
queda a manos del componente que lo utiliza.&lt;br /&gt;
Su funcionalidad principal es mostrar un tooltip de ayuda y su contenido es personalizable.&lt;br /&gt;
Tiene soporte para IE7+/Firefox/Chrome/Safari. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Como mencioné anteriormente, el tooltip de ayuda solo cuenta con una estructura. En la implementacion elegida, la misma está compuesta por un solo campo de texto &lt;br /&gt;
enriquecido que será el que contiene la información del tooltip.&lt;br /&gt;
El componente que quiera utilizar dicho tooltip tiene que heredar la estructura del tooltip de ayuda y además tiene que cambiar su forma de renderizarse adicionando un &lt;br /&gt;
div donde guarde la informacion del campo de texto enriquecido.&lt;br /&gt;
Por último, para convertir en un tooltip al div anterior, utilizamos una libreria js llamada qtip2. La misma nos permite de una forma muy facil crear un tooltip &lt;br /&gt;
altamente personalizable.&lt;br /&gt;
Como particularidad del estilado con lo único que nos encontramos es que para IE7 y IE8 no  es soportado el estilo display: inline-block. La solucion es agregar &lt;br /&gt;
los siguientes estilos: &lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
 display: inline-block; zoom: 1; *display: inline &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El tooltip de ayuda nos provee una funcionalidad que otro componente puede utilizar. Esta separación de tooltip de ayuda y componente nos permite una gran reutilizacion&lt;br /&gt;
de codigo ya que podemos usar el mismo tooltip de ayuda en todos los componentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6876</id>
		<title>Carrusel con limite en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6876"/>
				<updated>2013-08-02T14:39:15Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción==&lt;br /&gt;
&lt;br /&gt;
Un carrusel de imagenes personalizable para [[Liferay Portal]] con soporte para IE7+/Firefox/Chrome.	&lt;br /&gt;
Los aspectos personalizables son:&lt;br /&gt;
* La cantidad maxima de imagenes a mostrar.&lt;br /&gt;
* El intervalo de tiempo de transicion entre imagenes.&lt;br /&gt;
* La carga de imagenes con o sin link.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Utilizamos una estructura y template de Liferay. La estructura es un archivo XML y el template es un archivo velocity. &lt;br /&gt;
La estructura es la que define los campos que necesita el web content para crearse. Luego el template de velocity renderiza la estructura mencionada anteriormente.&lt;br /&gt;
Para implementarlo utilizamos como base el carrusel que provee Bootstrap. Dicho carrusel se caracteriza por ser responsive.&lt;br /&gt;
Para que además sea compatible con IE7+, utilizamos la libreria &amp;quot;respond.js&amp;quot; y algunos meta-tags html. El head debe tener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap-responsive.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE8&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE7&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/jquery-1.10.1.min.js' type='text/javascript'&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/bootstrap.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/respond.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que respond.js debe cargarse luego de la libreria de jquery y bootstrap.&lt;br /&gt;
&lt;br /&gt;
Además, para que el estilo &amp;quot;Opacity&amp;quot; sea soportado por IE7+, utilizamos el estilo: Alpha(Opacity=100).&lt;br /&gt;
Por ejemplo, si necesitamos que nuestro div tenga una opacidad del 50%:&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
  filter: Alpha(Opacity=50);&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Para que se puedan cargar varios carruseles en la misma página, el id identificador de cada instancia esta representado  por el id de la estructura(ej: &amp;quot;carrusel&amp;quot;), y &lt;br /&gt;
por el titulo del web-content (ej:&amp;quot;web-content-1&amp;quot;), siendo el id resultante &amp;quot;carrusel-web-content-1&amp;quot;. Esto convierte a cada instancia del carrusel en única siempre y cuando&lt;br /&gt;
los titulos de los web-content sean diferentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6875</id>
		<title>Carrusel con limite en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6875"/>
				<updated>2013-08-02T14:32:07Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Utilizamos una estructura y template de Liferay. La estructura es un archivo XML y el template es un archivo velocity. &lt;br /&gt;
La estructura es la que define los campos que necesita el web content para crearse. Luego el template de velocity renderiza la estructura mencionada anteriormente.&lt;br /&gt;
Para implementarlo utilizamos como base el carrusel que provee Bootstrap. Dicho carrusel se caracteriza por ser responsive.&lt;br /&gt;
Para que además sea compatible con IE7+, utilizamos la libreria &amp;quot;respond.js&amp;quot; y algunos meta-tags html. El head debe tener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap-responsive.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE8&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE7&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/jquery-1.10.1.min.js' type='text/javascript'&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/bootstrap.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/respond.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que respond.js debe cargarse luego de la libreria de jquery y bootstrap.&lt;br /&gt;
&lt;br /&gt;
Además, para que el estilo &amp;quot;Opacity&amp;quot; sea soportado por IE7+, utilizamos el estilo: Alpha(Opacity=100).&lt;br /&gt;
Por ejemplo, si necesitamos que nuestro div tenga una opacidad del 50%:&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
  filter: Alpha(Opacity=50);&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Para que se puedan cargar varios carruseles en la misma página, el id identificador de cada instancia esta representado  por el id de la estructura(ej: &amp;quot;carrusel&amp;quot;), y &lt;br /&gt;
por el titulo del web-content (ej:&amp;quot;web-content-1&amp;quot;), siendo el id resultante &amp;quot;carrusel-web-content-1&amp;quot;. Esto convierte a cada instancia del carrusel en única siempre y cuando&lt;br /&gt;
los titulos de los web-content sean diferentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6874</id>
		<title>Carrusel con limite en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6874"/>
				<updated>2013-08-02T14:31:04Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Para empezar, es correcto aclarar que el tooltip de ayuda no es un componente con estructura y template. Este componente tiene solo una estructura y el renderizado &lt;br /&gt;
queda a manos del componente que lo utiliza.&lt;br /&gt;
Su funcionalidad principal es mostrar un tooltip de ayuda y su contenido es personalizable.&lt;br /&gt;
Tiene soporte para IE7+/Firefox/Chrome/Safari. &lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Como mencioné anteriormente, el tooltip de ayuda solo cuenta con una estructura. En la implementacion elegida, la misma está compuesta por un solo campo de texto &lt;br /&gt;
enriquecido que será el que contiene la información del tooltip.&lt;br /&gt;
El componente que quiera utilizar dicho tooltip tiene que heredar la estructura del tooltip de ayuda y además tiene que cambiar su forma de renderizarse adicionando un &lt;br /&gt;
div donde guarde la informacion del campo de texto enriquecido.&lt;br /&gt;
Por último, para convertir en un tooltip al div anterior, utilizamos una libreria js llamada qtip2. La misma nos permite de una forma muy facil crear un tooltip &lt;br /&gt;
altamente personalizable.&lt;br /&gt;
Como particularidad del estilado con lo único que nos encontramos es que para IE7 y IE8 no  es soportado el estilo display: inline-block. La solucion es agregar &lt;br /&gt;
los siguientes estilos: &lt;br /&gt;
&lt;br /&gt;
 div{ &lt;br /&gt;
 display: inline-block; &lt;br /&gt;
 zoom: 1; &lt;br /&gt;
 *display: inline;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
El tooltip de ayuda nos provee una funcionalidad que otro componente puede utilizar. Esta separación de tooltip de ayuda y componente nos permite una gran reutilizacion&lt;br /&gt;
de codigo ya que podemos usar el mismo tooltip de ayuda en todos los componentes.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6873</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6873"/>
				<updated>2013-08-02T14:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Encuesta_con_estilos_propios_en_Liferay&amp;diff=6844</id>
		<title>Encuesta con estilos propios en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Encuesta_con_estilos_propios_en_Liferay&amp;diff=6844"/>
				<updated>2013-07-22T15:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con '== Descripción ==  Edición de los estilos de las encuestas nativas de Liferay Portal, en base a un modelo a seguir existente.  == Implementación ==  Utilizamos un tema pa…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Descripción ==&lt;br /&gt;
&lt;br /&gt;
Edición de los estilos de las encuestas nativas de [[Liferay Portal]], en base a un modelo a seguir existente.&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Utilizamos un tema para estilar las encuestas que vienen por default en [[Liferay Portal]], modificando un archivo CSS y utilizando una librería externa de JavaScript llamada [http://selectivizr.com/ Selectivizr], cuya funcionalidad es emular pseudo clases CSS3 y atributos selectores para Internet Explorer 6-8.&lt;br /&gt;
&lt;br /&gt;
A la hora de darle estilo a determinado elementos html usamos [http://librosweb.es/css_avanzado/capitulo_3/selectores_de_css_3.html selectores CCS3] y [http://librosweb.es/css_avanzado/capitulo_3/pseudo_clases.html Pseudo-clases] que nos permitieron desarrollarlo, ya que de otra forma no era posible acceder a los elementos a estilar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dificultades ==&lt;br /&gt;
&lt;br /&gt;
* [http://issues.liferay.com/browse/LPS-29594 Bug] de Liferay Portal version 6.1 CE para visualizar las barras de porcentaje de las encuestas.&lt;br /&gt;
* La estructura de html que generan las encuestas no es &amp;quot;amigable&amp;quot; a la hora de darle estilo. Uso de tablas, faltante de identificadores para poder seleccionar los elementos, etc.&lt;br /&gt;
* El cálculo del porcentaje no funciona correctamente con Internet Explorer, Firefox, etc. Debido a como arma el html los porcentajes.&lt;br /&gt;
* Hay que seleccionar los elementos según los [http://www.liferay.com/community/wiki/-/wiki/Main/Portlet+IDs identificadores de porlets de Liferay], ya que con  archivos css no se puede de otra forma.&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
&lt;br /&gt;
Consideramos que no fue fácil darle estilo al porlet de encuestas ya que encontramos varias dificultades, y presenta limitaciones al estilarlo. No pudimos lograr la totalidad del modelo.&lt;br /&gt;
&lt;br /&gt;
Por otro lado vemos que si podríamos cambiar la forma del template y la estructura html seria mucho mas sencillo darle estilo al mismo y lograr mayor compatibilidad con todos los navegadores.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6843</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6843"/>
				<updated>2013-07-22T15:41:54Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6830</id>
		<title>Carrusel con limite en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6830"/>
				<updated>2013-07-17T15:54:46Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Implementación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Descripción ==&lt;br /&gt;
&lt;br /&gt;
Un carrusel de imagenes personalizable para Liferay con soporte para IE7+/Firefox/Chrome.&lt;br /&gt;
Los aspectos personalizables son: &lt;br /&gt;
&lt;br /&gt;
* La cantidad maxima de imagenes a mostrar.&lt;br /&gt;
* El intervalo de tiempo de transicion entre imagenes.&lt;br /&gt;
* La carga de imagenes con o sin link.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Utilizamos una estructura y template de Liferay. La estructura es un archivo XML y el template es un archivo velocity. &lt;br /&gt;
La estructura es la que define los campos que necesita el web content para crearse. Luego el template de velocity renderiza la estructura mencionada anteriormente.&lt;br /&gt;
Para implementarlo utilizamos como base el carrusel que provee Bootstrap. Dicho carrusel se caracteriza por ser responsive.&lt;br /&gt;
Para que además sea compatible con IE7+, utilizamos la libreria &amp;quot;respond.js&amp;quot; y algunos meta-tags html. El head debe tener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap-responsive.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE8&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE7&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/jquery-1.10.1.min.js' type='text/javascript'&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/bootstrap.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/respond.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que respond.js debe cargarse luego de la libreria de jquery y bootstrap.&lt;br /&gt;
&lt;br /&gt;
Además, para que el estilo &amp;quot;Opacity&amp;quot; sea soportado por IE7+, utilizamos el estilo: Alpha(Opacity=100).&lt;br /&gt;
Por ejemplo, si necesitamos que nuestro div tenga una opacidad del 50%:&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
  filter: Alpha(Opacity=50);&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Para que se puedan cargar varios carruseles en la misma página, el id identificador de cada instancia esta representado  por el id de la estructura(ej: &amp;quot;carrusel&amp;quot;), y &lt;br /&gt;
por el titulo del web-content (ej:&amp;quot;web-content-1&amp;quot;), siendo el id resultante &amp;quot;carrusel-web-content-1&amp;quot;. Esto convierte a cada instancia del carrusel en única siempre y cuando&lt;br /&gt;
los titulos de los web-content sean diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
En nuestra busqueda de implementaciones para carruseles encontramos que mucho de ellos no eran soportados por IE7+ y/o no eran responsives &lt;br /&gt;
(ej: rcarousel, FlexSlider ). Otros, en cambio,si cumplian las características anteriores pero eran demasiado complejos de personalizar.&lt;br /&gt;
Al encontrar la libreria respond.js, tomamos la alternativa del carrusel de bootstrap ya que puede ser soportado por IE7+, responsive y es facilmente personalizable.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6829</id>
		<title>Carrusel con limite en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Carrusel_con_limite_en_Liferay&amp;diff=6829"/>
				<updated>2013-07-17T15:50:35Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con '== Descripción ==  Un carrusel de imagenes personalizable para Liferay con soporte para IE7+/Firefox/Chrome. Los aspectos personalizables son:   * La cantidad maxima de imagene…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Descripción ==&lt;br /&gt;
&lt;br /&gt;
Un carrusel de imagenes personalizable para Liferay con soporte para IE7+/Firefox/Chrome.&lt;br /&gt;
Los aspectos personalizables son: &lt;br /&gt;
&lt;br /&gt;
* La cantidad maxima de imagenes a mostrar.&lt;br /&gt;
* El intervalo de tiempo de transicion entre imagenes.&lt;br /&gt;
* La carga de imagenes con o sin link.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
== Implementación ==&lt;br /&gt;
&lt;br /&gt;
Utilizamos una estructura y template de Liferay. La estructura es un archivo XML y el template es un archivo velocity. &lt;br /&gt;
La estructura es la que define los campos que necesita el web content para crearse. Luego el template de velocity renderiza la estructura mencionada anteriormente.&lt;br /&gt;
Para implementarlo utilizamos como base el carrusel que provee Bootstrap. Dicho carrusel se caracteriza por ser responsive.&lt;br /&gt;
Para que además sea compatible con IE7+, utilizamos la libreria &amp;quot;respond.js&amp;quot; y algunos meta-tags html. El head debe tener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;css/bootstrap/bootstrap-responsive.css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=8&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE8&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=EmulateIE7&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/jquery-1.10.1.min.js' type='text/javascript'&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/bootstrap.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script src='js/lib/respond.min.js' type='text/javascript' &amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hay que tener en cuenta que respond.js debe cargarse luego de la libreria de jquery y bootstrap.&lt;br /&gt;
&lt;br /&gt;
Además, para que el estilo &amp;quot;Opacity&amp;quot; sea soportado por IE7+, utilizamos el estilo: Alpha(Opacity=100).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si necesitamos que nuestro div tenga una opacidad del 50%:&lt;br /&gt;
&lt;br /&gt;
 div{&lt;br /&gt;
  filter: Alpha(Opacity=50);&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Para que se puedan cargar varios carruseles en la misma página, el id identificador de cada instancia esta representado  por el id de la estructura(ej: &amp;quot;carrusel&amp;quot;), y &lt;br /&gt;
por el titulo del web-content (ej:&amp;quot;web-content-1&amp;quot;), siendo el id resultante &amp;quot;carrusel-web-content-1&amp;quot;. Esto convierte a cada instancia del carrusel en única siempre y cuando&lt;br /&gt;
los titulos de los web-content sean diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por que?&lt;br /&gt;
En nuestra busqueda de implementaciones para carruseles encontramos que mucho de ellos no eran soportados por IE7+ y/o no eran responsives &lt;br /&gt;
(ej: rcarousel, FlexSlider ). Otros, en cambio,si cumplian las características anteriores pero eran demasiado complejos de personalizar.&lt;br /&gt;
Al encontrar la libreria respond.js, tomamos la alternativa del carrusel de bootstrap ya que puede ser soportado por IE7+, responsive y es facilmente personalizable.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6828</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6828"/>
				<updated>2013-07-17T15:45:04Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6739</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6739"/>
				<updated>2012-10-10T19:20:02Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Para qué se usa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permitiera definir una página layout que decore las páginas de contenido dinámico de nuestro sitio y nos permita reutilizar las páginas estáticas.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y pudimos implementarla en nuestro proyecto de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
Como conclusión podemos decir que '''SiteMesh''' se puede implementar de forma rápida, sencilla y no invasiva en un proyecto existente y su configuración es intuitiva.&lt;br /&gt;
Además que resuelve la problemática de reutilización de contenido estático en un proyecto web.&lt;br /&gt;
&lt;br /&gt;
Así que les recomendamos que visiten el sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] para mayor información.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Diagrama_sitemesh.jpg&amp;diff=6738</id>
		<title>Archivo:Diagrama sitemesh.jpg</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Diagrama_sitemesh.jpg&amp;diff=6738"/>
				<updated>2012-10-10T19:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6737</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6737"/>
				<updated>2012-10-10T19:19:20Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Para qué se usa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
[[File:diagrama_sitemesh.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permitiera definir una página layout que decore las páginas de contenido dinámico de nuestro sitio y nos permita reutilizar las páginas estáticas.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y pudimos implementarla en nuestro proyecto de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
Como conclusión podemos decir que '''SiteMesh''' se puede implementar de forma rápida, sencilla y no invasiva en un proyecto existente y su configuración es intuitiva.&lt;br /&gt;
Además que resuelve la problemática de reutilización de contenido estático en un proyecto web.&lt;br /&gt;
&lt;br /&gt;
Así que les recomendamos que visiten el sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] para mayor información.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Diagrama_sitemesh.png&amp;diff=6736</id>
		<title>Archivo:Diagrama sitemesh.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Diagrama_sitemesh.png&amp;diff=6736"/>
				<updated>2012-10-10T19:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6709</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6709"/>
				<updated>2012-09-14T16:15:49Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permitiera definir una página layout que decore las páginas de contenido dinámico de nuestro sitio y nos permita reutilizar las páginas estáticas.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y pudimos implementarla en nuestro proyecto de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusión ==&lt;br /&gt;
Como conclusión podemos decir que '''SiteMesh''' se puede implementar de forma rápida, sencilla y no invasiva en un proyecto existente y su configuración es intuitiva.&lt;br /&gt;
Además que resuelve la problemática de reutilización de contenido estático en un proyecto web.&lt;br /&gt;
&lt;br /&gt;
Así que les recomendamos que visiten el sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] para mayor información.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6708</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6708"/>
				<updated>2012-09-14T16:15:25Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permitiera definir una página layout que decore las páginas de contenido dinámico de nuestro sitio y nos permita reutilizar las páginas estáticas.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y pudimos implementarla en nuestro proyecto de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como conclusión podemos decir que '''SiteMesh''' se puede implementar de forma rápida, sencilla y no invasiva en un proyecto existente y su configuración es intuitiva.&lt;br /&gt;
Además que resuelve la problemática de reutilización de contenido estático en un proyecto web.&lt;br /&gt;
&lt;br /&gt;
Así que les recomendamos que visiten el sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] para mayor información.&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6707</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6707"/>
				<updated>2012-09-14T16:08:49Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permitiera definir una página layout que decore las páginas de contenido dinámico de nuestro sitio y nos permita reutilizar las páginas estáticas.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y de forma rápida y sencilla pudimos implementarla en nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6706</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6706"/>
				<updated>2012-09-14T16:07:26Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permita definir una página layout que decore las páginas de contenido dinámico de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y de forma rápida y sencilla pudimos implementarla en nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6705</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6705"/>
				<updated>2012-09-14T16:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Esto nos generaba un inconveniente al momento de mantener estas páginas y tener que modificar el contenido estático en todas.&lt;br /&gt;
&lt;br /&gt;
Por esta razón buscamos una biblioteca que nos permita definir una página layout que decore las páginas de contenido dinámico de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Encontramos esta biblioteca y de forma rápida y sencilla pudimos implementarla en nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Lo siguiente fue extraer los contenido estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6704</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6704"/>
				<updated>2012-09-14T16:02:36Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' en nuestro proyecto buscabamos una biblioteca que nos permita definir una página layout que decore las páginas de contenido dinámico de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Luego de implementar '''SiteMesh''' pudimos extraer estos contenidos estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6703</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6703"/>
				<updated>2012-09-14T16:02:21Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar '''SiteMesh''' nuestro proyecto buscabamos una biblioteca que nos permita definir una página layout que decore las páginas de contenido dinámico de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Luego de implementar '''SiteMesh''' pudimos extraer estos contenidos estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6702</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6702"/>
				<updated>2012-09-14T16:00:29Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Nuestra experiencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;br /&gt;
Antes de implementar SiteMesh nuestro proyecto buscabamos una biblioteca que nos permita definir una página layout que decore las páginas de contenido dinámico de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Nuestro proyecto constaba de 5 páginas HTML las cuales tenían duplicado su contenido estático en las secciones de '''Cabecera''', '''Menu''' y '''Pie de página'''.&lt;br /&gt;
&lt;br /&gt;
Luego de implementar '''SiteMesh''' pudimos extraer estos contenidos estáticos a diferentes archivos jsp ('''cabecera.jsp''', '''menu.jsp''' y '''pie.jsp''') que luego pudimos incluir en la página de layout '''basic-theme.jsp''' de la siguiente forma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;%@ include file=&amp;quot;/includes/meta.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;contenedorPrincipal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/cabecera.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/menu.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
            &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
            &amp;lt;%@ include file=&amp;quot;/includes/pie.jsp&amp;quot; %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6701</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6701"/>
				<updated>2012-09-14T15:46:49Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Configurando SiteMesh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada '''data''' en el directorio de contenido web (generalmente '''web''') con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo '''decorator.xml''' de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6700</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6700"/>
				<updated>2012-09-14T15:44:45Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Configurando SiteMesh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
1. Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada data en el directorio de contenido web (generalmente web) con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
4. Configurar el archivo decorator.xml de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
5. Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6699</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6699"/>
				<updated>2012-09-14T15:44:18Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Instalar SiteMesh Manualmente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
1. Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
2. Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
# Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada data en el directorio de contenido web (generalmente web) con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
# Configurar el archivo decorator.xml de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
# Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6698</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6698"/>
				<updated>2012-09-14T15:43:11Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Configurando SiteMesh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
# Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
# Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
Según el propio sitio de [http://wiki.sitemesh.org/display/sitemesh/Home SiteMesh] la mejor forma para entender esta biblioteca es usándola.&lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos explicaremos como implementar un ejemplo simple en un proyecto existente:&lt;br /&gt;
&lt;br /&gt;
# Crear la página '''menu.jsp''' dentro de una carpeta nueva llamada data en el directorio de contenido web (generalmente web) con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Beverages&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Cappucino $3.25&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Latte $3.35&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Espresso $2.00&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Mocha $3.50&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear la página '''hours.jsp''' en la misma ubicación que la página anterior con este contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Weekdays&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Weekends&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;5:00pm - 10:00pm&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear la página de layout ('''basic-theme.jsp''')en la misma carpeta con el siguiente contenido.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://www.opensymphony.com/sitemesh/decorator&amp;quot; prefix=&amp;quot;decorator&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Navigation&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;decorator:body /&amp;gt;&lt;br /&gt;
    &amp;lt;hr /&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Footer&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''El tag decorator:body será reemplazado por el contenido de la página a &amp;quot;decorar&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
# Configurar el archivo decorator.xml de la siguiente forma&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators defaultdir=&amp;quot;/decorators&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decorator name=&amp;quot;basic-theme&amp;quot; page=&amp;quot;basic-theme.jsp&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;pattern&amp;gt;/data/*&amp;lt;/pattern&amp;gt;&lt;br /&gt;
    &amp;lt;/decorator&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Con esta configuración estamos indicando que se aplique el decorador '''basic-theme.jsp''' a todas los contenidos previamente creados en la carpeta &amp;quot;/data&amp;quot;.''&lt;br /&gt;
&lt;br /&gt;
# Por último es necesario reiniciar el servidor, para que tome los cambios realizados en el proyecto, y luego al acceder a alguna de las páginas '''menu.jsp''' o '''hours.jsp''' se visualizarán sus contenidos decorados con el layout configurado ('''basic-theme.jsp''')&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6697</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6697"/>
				<updated>2012-09-14T15:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Cómo se implementa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente ===&lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
# Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
# Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
=== Configurando SiteMesh ===&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6696</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6696"/>
				<updated>2012-09-14T15:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Instalar SiteMesh Manualmente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente === &lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
# Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
# Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasta acá la aplicación debe seguir funcionando normalmente, ya que no se esta implementando ningún decorators aún.&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6695</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6695"/>
				<updated>2012-09-14T15:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Cómo se implementa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar SiteMesh Manualmente === &lt;br /&gt;
&lt;br /&gt;
Seguir estos 3 pasos: &lt;br /&gt;
&lt;br /&gt;
# Agregar la biblioteca [http://wiki.sitemesh.org/display/sitemesh/Download SiteMesh jar] en WEB-INF/lib&lt;br /&gt;
# Configurar el siguiente filtro en el archivo WEB-INF/web.xml, dentro del tag &amp;lt;web-app&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;filter&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-class&amp;gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
&amp;lt;/filter&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;sitemesh&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Crear el archivo decorators.xml en el directorio WEB-INF con el siguiente contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;decorators&amp;gt;&lt;br /&gt;
&amp;lt;/decorators&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6694</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6694"/>
				<updated>2012-09-14T14:57:33Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Para qué se usa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
* SiteMesh intercepta las peticiones de todas las paginas HTML generadas, procesa el contenido y lo &amp;quot;decora&amp;quot; para obtener el resultado final.&lt;br /&gt;
&lt;br /&gt;
* También puede generar una pagina compleja a partir de varias pequeñas.&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6693</id>
		<title>SiteMesh 2</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=SiteMesh_2&amp;diff=6693"/>
				<updated>2012-09-14T14:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: Página creada con '== Qué es SiteMesh == Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qué es SiteMesh ==&lt;br /&gt;
Es un framework Java para aplicaciones web que aplica el patrón de diseño [http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) Decorator] para permitir la separación de contenido en la capa de presentación.&lt;br /&gt;
&lt;br /&gt;
Con este framework se puede definir la distribución de contenido (layout) de la vista y componerla en base a páginas simples, las cuales conformarán una página compleja (decorada) justo antes de enviarse al cliente.&lt;br /&gt;
&lt;br /&gt;
== Para qué se usa ==&lt;br /&gt;
&lt;br /&gt;
SiteMesh utiliza [http://www.oracle.com/technetwork/java/filters-137243.html Filters] disponibles a partir de la versión 2.3 de Java Servlet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_sitemesh.png]]&lt;br /&gt;
&lt;br /&gt;
== Cómo se implementa ==&lt;br /&gt;
&lt;br /&gt;
== Nuestra experiencia ==&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Java&amp;diff=6692</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Java&amp;diff=6692"/>
				<updated>2012-09-14T14:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Frameworks de presentación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Java es un lenguaje de programación, aunque también se suele hacer referencia con este nombre a toda una plataforma para el desarrollo de aplicaciones. Hay un buen [http://es.wikipedia.org/wiki/Java_%28Sun%29 resumen de Java en la wikipedia].&lt;br /&gt;
&lt;br /&gt;
Al desarrollar un sistema se suele basar en una [[Arquitectura De Software]] para crear los componentes.&lt;br /&gt;
&lt;br /&gt;
Java se caracteriza por una enorme cantidad de proyectos libres.&lt;br /&gt;
&lt;br /&gt;
== Algunas tecnologías Java ==&lt;br /&gt;
=== Frameworks de base===&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Terracotta]]&lt;br /&gt;
* [[EJB]]&lt;br /&gt;
* [[Restlet]]&lt;br /&gt;
&lt;br /&gt;
===Acceso a datos===&lt;br /&gt;
* [[Hibernate]]&lt;br /&gt;
* [[Apache Lucene]]&lt;br /&gt;
&lt;br /&gt;
===Frameworks de presentación===&lt;br /&gt;
* [[Apache Tiles]]&lt;br /&gt;
* [[Struts]]&lt;br /&gt;
* [[JSF]]&lt;br /&gt;
* [[JSTL]]&lt;br /&gt;
* [[GWT]]&lt;br /&gt;
* [[SiteMesh 2]]&lt;br /&gt;
&lt;br /&gt;
===Librerías===&lt;br /&gt;
* [[Google Guava]]&lt;br /&gt;
* [[Jawr]]&lt;br /&gt;
&lt;br /&gt;
===Mensajeria===&lt;br /&gt;
* [[JMS]]&lt;br /&gt;
&lt;br /&gt;
===Web Services===&lt;br /&gt;
* [[Web Service]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
&lt;br /&gt;
===Ejecuciones batch y programadas===&lt;br /&gt;
* [[Quartz]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
===Seguridad===&lt;br /&gt;
* [[Spring Security]]&lt;br /&gt;
&lt;br /&gt;
===Cuestiones generales de Java===&lt;br /&gt;
* [[Fechas En Java]]&lt;br /&gt;
* [[Numeros En Java]]&lt;br /&gt;
* [[Encoding En Java]]&lt;br /&gt;
* [[Serializacion De Objetos En Java]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[SLF4J]]&lt;br /&gt;
* [[Cache De Objetos Java]]&lt;br /&gt;
* [[Exportacion Hacia Archivos]]&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Equipo_Pnt&amp;diff=6587</id>
		<title>Equipo Pnt</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Equipo_Pnt&amp;diff=6587"/>
				<updated>2012-04-23T21:12:47Z</updated>
		
		<summary type="html">&lt;p&gt;Maro: /* Integrantes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PNT (Proyectos de Nuevas Tecnologías) es un equipo de desarrollo de una consultora de sistemas, trabajando en proyectos de una empresa multinacional de telefonía.&lt;br /&gt;
&lt;br /&gt;
PNT fue formado inicialmente en diciembre de 2004 para resolver el diseño y desarrollo de proyectos basados en tecnologías Java.&lt;br /&gt;
&lt;br /&gt;
La experiencia de PNT fue documentada a lo largo de los años por varios de sus integrantes en una intranet propia del grupo, a través de notas en un [[Joomla]]. Luego experimentaron el uso de [[Team Elements]] y actualmente su gestiòn de conocimientos está desarrollada en una wiki de la consultora.&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
Los integrantes actuales de PNT son:&lt;br /&gt;
* Adrian Prados&lt;br /&gt;
* Carlos Benitez&lt;br /&gt;
* Carolina Barbiero&lt;br /&gt;
* Claudia Blatter&lt;br /&gt;
* Diego Gomez&lt;br /&gt;
* Diego Romero&lt;br /&gt;
* Emiliano Estevez&lt;br /&gt;
* Favio Tolosa&lt;br /&gt;
* Fernando Guerra&lt;br /&gt;
* Fernando Martinez&lt;br /&gt;
* Franco Morinigo&lt;br /&gt;
* Gerardo Matsui&lt;br /&gt;
* Ignacio Capodanno&lt;br /&gt;
* Jonathan Lijs&lt;br /&gt;
* Juan Manual Aguero&lt;br /&gt;
* Laureano Clausi&lt;br /&gt;
* Leandro Gutierrez&lt;br /&gt;
* Leonardo De Seta&lt;br /&gt;
* Lucas Martinez&lt;br /&gt;
* Mariano Rafael Sola&lt;br /&gt;
* Matias Novillo Caceres&lt;br /&gt;
* Matias Zamorano&lt;br /&gt;
* Maximiliano Ganuza&lt;br /&gt;
* Pablo Novas&lt;br /&gt;
* Pablo Rivero&lt;br /&gt;
* Sebastian Murua&lt;br /&gt;
&lt;br /&gt;
== Ex-integrantes ==&lt;br /&gt;
Las siguientes personas fueron miembros de PNT y aportaron a Dos Ideas a través de artículos y notas varias:&lt;br /&gt;
* Agustin Fernandez&lt;br /&gt;
* Agustin Gallego&lt;br /&gt;
* Alejandra Holman&lt;br /&gt;
* Alejandro Amaya&lt;br /&gt;
* Andrea Girimonte&lt;br /&gt;
* Andres Candal&lt;br /&gt;
* Cristian DeBenedetti&lt;br /&gt;
* Demian Berjman&lt;br /&gt;
* Fabian Soliz&lt;br /&gt;
* Federico Cherchyk&lt;br /&gt;
* Federico Ferrer&lt;br /&gt;
* Fernando Piccirillo&lt;br /&gt;
* Fernando Requena&lt;br /&gt;
* Gabriel Teolis&lt;br /&gt;
* German DelTuffo&lt;br /&gt;
* Juan José Barrera&lt;br /&gt;
* Marcela Diaz&lt;br /&gt;
* Marcelo Zabalet&lt;br /&gt;
* Mariano Cifre&lt;br /&gt;
* Mariela Eujanian&lt;br /&gt;
* Nicolas Ferrucci&lt;br /&gt;
* Ramiro Gomez Mazza&lt;br /&gt;
* Sergio Sanchez&lt;br /&gt;
* Valeria Molinari&lt;br /&gt;
* Victor Cabas&lt;br /&gt;
&lt;br /&gt;
== Otros participantes ==&lt;br /&gt;
Las siguientes personas interactuaron directamente con PNT y también realizaron aportes:&lt;br /&gt;
* Alejandro Vega&lt;br /&gt;
* Carlos Alvarez&lt;/div&gt;</summary>
		<author><name>Maro</name></author>	</entry>

	</feed>