<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nuevascreaciones &#187; Woodstock</title>
	<atom:link href="http://nuevascreaciones.com/archives/tag/woodstock/feed" rel="self" type="application/rss+xml" />
	<link>http://nuevascreaciones.com</link>
	<description>De todo un poco</description>
	<lastBuildDate>Tue, 28 Apr 2009 09:01:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Woodstock y Facelets una convivencia extraña</title>
		<link>http://nuevascreaciones.com/archives/18</link>
		<comments>http://nuevascreaciones.com/archives/18#comments</comments>
		<pubDate>Mon, 03 Nov 2008 11:00:06 +0000</pubDate>
		<dc:creator>makensi</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java ServerFaces]]></category>
		<category><![CDATA[Woodstock]]></category>

		<guid isPermaLink="false">http://nuevascreaciones.com/?p=18</guid>
		<description><![CDATA[En el último proyecto en el que estuve trabajando tome la decisión de hacer uso la librería de componentes JSF, Woodstock. Antes de comenzar el desarrollo pensé en hacer uso de una librería para el desarrollo de templates compatible con JSF. Pensé en Struts Tiles y Facelets y tras un rato evaluándolos(basándome en mi experiencia [...]]]></description>
			<content:encoded><![CDATA[<p>En el último proyecto en el que estuve trabajando tome la decisión de hacer uso la librería de componentes <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a>, <a href="https://woodstock.dev.java.net/index.html">Woodstock</a>. Antes de comenzar el desarrollo pensé en hacer uso de una librería para el desarrollo de templates compatible con <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a>. Pensé en <a href="http://struts.apache.org/1.x/struts-tiles/">Struts Tiles</a> y <a href="https://facelets.dev.java.net/">Facelets</a> y tras un rato evaluándolos(basándome en mi experiencia con cada uno) me decante por <a href="https://facelets.dev.java.net/">Facelets</a> por varios motivos:  <span id="more-18"></span></p>
<ul>
<li>No se tiene que configurar cada página en el <strong>tiles-conf</strong>. Es cierto puede ser una tontería pero la razón de peso para mi es que, este oculta e incrementa el tiempo necesario para la compresión de proyectos que ya están desarrollados.</li>
<li>Solo se hace uso de una tecnología (<a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a>), lo cual para mi es una razón de peso. A mayor número de tecnologías usadas, mayor es la complejidad y la dificultad de compresión del proyecto web y claro esta en el desarrollo de aplicaciones web ya intervienen unas cuantas de tecnologías como para complicarlo más.</li>
<li>El trabajo con <a href="https://facelets.dev.java.net/">Facelets</a> se asimila mucho al uso de templates con <a href="http://es.wikipedia.org/wiki/XSLT">XSLT</a> (en lo cual me siento muy cómodo). Dispones de elementos como <strong>ui:composion</strong> en vez de <strong>xsl:call-templates</strong>, y <strong>xsl:apply</strong> templates y siempre conoces que ficheros de templates usa tu página.</li>
</ul>
<p>Tras descargarme las últimas versiones de ambas librerías, la configuración no fue un problema ya que solo debemos agregar estas lineas a nuestro <strong>web.xml</strong> para configurar el gestor de temas de <a href="https://woodstock.dev.java.net/index.html">Woodstock</a> y el filtro de subida de ficheros: <code> </code></p>
<p><code>&lt;filter&gt;<br />
&lt;filter-name&gt;UploadFilter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;com.sun.webui.jsf.util.UploadFilter&lt;/filter-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;maxSize&lt;/param-name&gt;<br />
&lt;param-value&gt;1000000&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;sizeThreshold&lt;/param-name&gt;<br />
&lt;param-value&gt;4096&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;UploadFilter&lt;/filter-name&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;/filter-mapping&gt; </code> <code><br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;ThemeServlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;com.sun.webui.theme.ThemeServlet&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;ThemeServlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/theme/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</code></p>
<p>Y en el caso de <a href="https://facelets.dev.java.net/">Facelets</a> que es un poco más complejo solo necesitamos agregar los siguientes parámetros de configuración al <strong>web.xml</strong>:</p>
<p><code> &lt;context-param&gt;<br />
&lt;param-name&gt;javax.faces.DEFAULT_SUFFIX&lt;/param-name&gt;<br />
&lt;param-value&gt;.xhtml&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;context-param&gt;<br />
&lt;param-name&gt;facelets.DEVELOPMENT&lt;/param-name&gt;<br />
&lt;param-value&gt;false&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;context-param&gt;<br />
&lt;param-name&gt;facelets.SKIP_COMMENTS&lt;/param-name&gt;<br />
&lt;param-value&gt;true&lt;/param-value&gt;<br />
&lt;/context-param&gt; </code></p>
<p>Y el siguiente manejador de vistas al <strong>faces-config.xml</strong>:  <code></p>
<p>&lt;application&gt;<br />
&lt;view-handler&gt;com.sun.facelets.FaceletViewHandler&lt;/view-handler&gt;<br />
&lt;/application&gt;</code></p>
<p>Con esto habremos configurado todo lo necesario y los que uséis <a href="http://www.netbeans.org/">NetBeans</a> no tendréis ni que configurar esto ya que durante la creación de vuestro proyecto Web una vez seleccionados los frameworks <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> y <a href="https://facelets.dev.java.net/">Facelets</a> esta configuración sera agregada.  Por norma las configuraciones de <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> suele disponer de un mapeo del servlet sobre <strong>/faces/*</strong> o <strong>*.jsf</strong>, si os fijáis en el parámetro <strong>javax.faces.DEFAULT_SUFFIX</strong> mapea <strong>*.xhtml</strong>. ¿Qué significa esto?:</p>
<ol>
<li> Todas las peticiones que vayan contra un fichero con extensión <strong>*.xhtml</strong> serán usadas como ficheros de templates.</li>
<li>Todas las peticiones que vayan contra un fichero con extensión <strong>*.jsf</strong> (si usaste esta configuración) o estén en la ruta <strong>/faces/*</strong> (si usaste esta) serán tratados como páginas <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> normales.</li>
</ol>
<p>El resto de parámetros de como <strong>facelets.DEVELOPMENT</strong> para mostrar los errores y trazas vía web (para esto ya tenemos una bonita consola en nuestro IDE) y <strong>facelets.SKIP_COMMENTS</strong> (se salta cualquier comentario sin tratarlo) no son de importancia (de hecho podemos trabajar sin ellos ya que disponen de configuración por defecto en la librería).  Bien ahora viene lo interesante, creamos un fichero <strong>template.xhtml</strong> con el siguiente contenido en el raíz de nuestro sitio web: <code> </code></p>
<p><code>&lt;f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:webuijsf="http://www.sun.com/webui/webuijsf"&gt;<br />
&lt;webuijsf:page&gt;<br />
&lt;webuijsf:html&gt;<br />
&lt;webuijsf:head&gt;<br />
&lt;f:facet name="title"&gt;<br />
&lt;ui:insert name="title"&gt;Titulo por defecto&lt;/ui:insert&gt; </code><code><br />
&lt;/f:facet&gt;<br />
&lt;/webuijsf:head&gt;<br />
&lt;webuijsf:body&gt;<br />
&lt;webuijsf:form id="indexForm"&gt;<br />
&lt;ui:insert name="body"&gt;Cuerpo por defecto&lt;/ui:insert&gt;<br />
&lt;/webuijsf:form&gt;<br />
&lt;/webuijsf:body&gt;<br />
&lt;/webuijsf:html&gt;<br />
&lt;/webuijsf:page&gt;<br />
&lt;/f:view&gt;</code></p>
<p>Y otro fichero <strong>index.jsp</strong> con: <code> </code></p>
<p><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ui="http://java.sun.com/jsf/facelets"&gt;<br />
&lt;ui:composition template="/template.xhtml"&gt;<br />
&lt;ui:define name="title"&gt;Texto de titulo&lt;/ui:define&gt;<br />
&lt;ui:define name="body"&gt;Texto de cuerpo&lt;/ui:define&gt;<br />
&lt;/ui:composition&gt;<br />
&lt;/jsp:root&gt;</code></p>
<p>Paso a describiros que es lo que hacemos en cada fichero:</p>
<ol>
<li><strong>template.xhtml</strong>: Este fichero es la plantilla y dispone de una vista de <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> en la que agregamos el cuerpo de nuestra pagina que como se observa hace uso de los tags de <a href="https://woodstock.dev.java.net/index.html">Woodstock</a>. En determinadas posiciones como son el título de la página agregamos las etiquetas <strong>ui:insert</strong> con un nombre que más tarde usaremos para remplazar su contenido.</li>
<li><strong>index.jsp</strong>: En el disponemos de una llamada <strong>ui:composion</strong> con el atributo template apuntando a nuestro fichero de template <strong>template.xhtml</strong>. Seguidamente dispone de ui:define apuntando a los <strong>ui:insert</strong> de nuestro fichero<strong> template.xhtml</strong>(igual que un <strong>xsl:call-template</strong> con sus <strong>xsl:param</strong>) y con los nuevos valores(no tiene por que ser texto puede ser etiquetado <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a>).</li>
</ol>
<p>Como se observa lo que conseguimos de este modo es disponer de un cuerpo único para todas nuestra páginas. Algo importante al respecto de <a href="https://facelets.dev.java.net/">Facelets</a> es que se permiten realizar <strong>ui:define</strong> en nuestro ficheros jsp a atributos que estan en otros <strong>ui:composion</strong> de nuestro template, esto quiere decir que podemos combinar varios templates a través de llamadas <strong>ui:composion</strong> e insertar solo las partes que nos hacen falta.</p>
<h3>La convivencia</h3>
<p>El uso conjunto de <a href="https://facelets.dev.java.net/">Facelets</a> y <a href="https://woodstock.dev.java.net/index.html">Woodstock</a> cambia los atributos del segundo. ¿Que quiere decir esto?, pues que si creamos por ejemplo:</p>
<ul>
<li> Un <strong>webuijsf:button</strong> este deberá usar atributos <strong>action</strong> en vez de <strong>actionExpression</strong>.</li>
<li>Un <strong>webuijsf:upload</strong> deberá disponer de un atributo <strong>value</strong> en vez de un <strong>fileUploaded</strong> y además obligara a insertar un <strong>enctype=&#8221;multipart/form-data&#8221;</strong> en nuestro <strong>webuijsf:form</strong> para que funcione.</li>
</ul>
<p>Solo puedo deciros que el proyecto <a href="https://woodstock.dev.java.net/index.html">Woodstock</a> tiene modificada su API (estos atributos que cambian están marcados como <strong>DEPRETATED</strong>) y que cuando trabaja con <a href="https://facelets.dev.java.net/">Facelets</a> estos cambian (Un par de horas o tres me dan la razón <img src='http://nuevascreaciones.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).  Podéis descargaros el proyecto de <a href="http://www.netbeans.org/">NetBeans</a> (se necesitan los plugins <a href="http://www.netbeans.org/kb/60/web/intro.html">Visual Web JSF Components</a> y <a href="https://facelets.dev.java.net/">Facelets</a> para disponer de las librerías) <a rel="attachment wp-att-31" href="http://nuevascreaciones.com/archives/18/woodstock_facelets_example">aquí</a>.  Espero que os sirva de algo.  <img src='http://nuevascreaciones.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://nuevascreaciones.com/archives/18/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
