<?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>Everything is wrong &#187; JSTL</title>
	<atom:link href="http://everythingiswrong.free.fr/index.php/tag/jstl/feed/" rel="self" type="application/rss+xml" />
	<link>http://everythingiswrong.free.fr</link>
	<description>Un blog dédié à l&#039;informatique en général</description>
	<lastBuildDate>Wed, 06 Oct 2021 21:20:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Cycle de vie Facelets et la JSTL</title>
		<link>http://everythingiswrong.free.fr/index.php/2010/09/28/cycle-de-vie-facelets-et-la-jstl/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2010/09/28/cycle-de-vie-facelets-et-la-jstl/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 14:11:03 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSTL]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=290</guid>
		<description><![CDATA[Présentation de Facelets et de la JSTL]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai souvent lu dans des forums et des blogs que la JSTL ne s&#8217;intègre pas du tout avec Facelets et qu&#8217;il faut absolument éviter d&#8217;utiliser les deux technologies ensemble. C&#8217;est faux à condition de bien connaître Facelets :</p>
<h1 style="text-align: justify;">Cycle de vie d&#8217;une requêtes Facelets</h1>
<p style="text-align: justify;">Rappelons d&#8217;abord le cycle de vie d&#8217;une requête JSF. Lorsque l&#8217;utilisateur demande une page JSF, sa requête provoque coté serveur l&#8217;exécution suivante :</p>
<ol>
<li>Restore view</li>
<li>Apply request values</li>
<li>Process validation</li>
<li>Update model value</li>
<li>Invoque application</li>
<li>Render request</li>
</ol>
<p style="text-align: justify;">Avec Facelets, il y a un cycle de vie en deux phases :</p>
<ol>
<li>Compile : création d&#8217;un &#8220;component tree&#8221; dans une &#8220;﻿UIViewRoot&#8221;</li>
<li>Run (exécution du cycle de vie JSF)</li>
</ol>
<p style="text-align: justify;">On peut remarquer que Facelets fonctionne de la même façon que les JSP (compilation de la JSP puis exécution de cette dernière). Pourquoi ces deux phases existent-elles ? Facelets est composé des TagHandlers (compile-time) et des ComponentHandlers (invocation JSF). Voici la liste triée de ces composants :</p>
<ul>
<li>TagsHandlers
<ul>
<li>c:forEach</li>
<li>c:choose</li>
<li>c:set</li>
<li>c:if</li>
<li>f:facet</li>
<li>f:actionListener</li>
<li>f:valueChangeListener</li>
<li>ui:include</li>
<li>ui:decorate</li>
<li>ui:composition</li>
<li><a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#taglib-create-custom" target="_blank">Tous les autres Tags tierces</a></li>
</ul>
</li>
<li>ComponentHandlers
<ul>
<li>ui:repeat</li>
<li>ui:fragment</li>
<li>ui:component</li>
<li>f:view</li>
<li>f:verbatim</li>
<li>f:selectItems</li>
<li>h:inputText</li>
<li>h:datatable</li>
<li><a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#dev-meta-component" target="_blank">Tous les autres composants tierces</a></li>
</ul>
</li>
</ul>
<p>Pour information, voici deux bons article sur le sujet pour aller plus loin dans les détails : <a href="http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets" target="_blank">http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets</a> et <a href="http://www.znetdevelopment.com/blogs/tag/facelets/" target="_blank">http://www.znetdevelopment.com/blogs/tag/facelets/</a>.</p>
<h1 style="text-align: justify;">Tag de la JSTL</h1>
<p style="text-align: justify;">Facelets n&#8217;implémente que certaines fonctions de la JSTL  :</p>
<ul>
<li>&lt;c:if/&gt;</li>
<li>&lt;c:forEach/&gt;</li>
<li>&lt;c:catch/&gt;</li>
<li>&lt;c:set/&gt; (utilisation déconseillée)</li>
</ul>
<p style="text-align: justify;">Les autres tag de la JSTL ne fonctionnent pas car ils ne sont pas implémentés. C&#8217;est l&#8217;occasion de remarquer qu&#8217;en utilisant les tags JSTL dans une application Facelets, on ne se base pas sur la version standard des composants mais sur une version re-développée par Facelets.</p>
<p style="text-align: justify;">Il faut donc se méfier car certains tag ne fonctionnent pas exactement de le même façon. Par exemple, l&#8217;attribut <em>varStatus</em> du tag &lt;c:forEach/&gt; pointe sur l&#8217;instance d&#8217;un objet de type<strong><strong> </strong></strong><em>com.sun.facelets.tag.jstl.core.IterationStatus</em><em> </em>et non de type <a href="http://download-llnw.oracle.com/javaee/5/jstl/1.1/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html" target="_blank"><em>javax.servlet.jsp.jstl.core.LoopTagStatus</em></a> comme décrit dans la documentation de la JSTL. Certaines méthodes ne sont pas implémentées. Dans ce cas il est donc préférable de se fier qu&#8217;a la <a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#taglib-available-jstl" target="_blank">documentation de référence de Facelets</a> et non celle de la JSTL. Pour la javadoc, je ne l&#8217;ai trouvé qu&#8217;en téléchargements Facelets <a href="https://facelets.dev.java.net/servlets/ProjectDocumentList?folderID=3635&amp;expandFolder=3635&amp;folderID=0" target="_blank">ici</a>.</p>
<p style="text-align: justify;">Pour information, visiblement, dans <a href="http://java.sun.com/javaee/javaserverfaces/reference/api/index.html" target="_blank">JSF2.0</a>, Facelets utilise désormais la version standardisée de la JSTL.</p>
<h1>Workaround sur l&#8217;utilisation de &lt;c:set/&gt;</h1>
<p style="text-align: justify;">Lorsque l&#8217;on commence à utiliser la JSTL on est vite tenté d&#8217;utiliser des variables dans les boucles &lt;c:forEach/&gt; d&#8217;où l&#8217;utilisation du tag déconseillé &lt;c:set/&gt;. Il est cependant possible de contourner le problème en utilisant une autre fonctionnalité de Facelets. En effet, il est possible d&#8217;utiliser le tag &lt;ui:include/&gt; avec des paramètres pour contourner l&#8217;utilisation de la fonctionnalité déconseillée de la JSTL. Sans compter que cela permet de découper les pages XHTML en petits fragments ce qui peut rentre le code plus facile à lire et à maintenir.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2010/09/28/cycle-de-vie-facelets-et-la-jstl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser les fonctions JSTL avec l&#8217;EL de JSF</title>
		<link>http://everythingiswrong.free.fr/index.php/2010/09/09/utiliser-les-fonctions-jstl-avec-lel-de-jsf/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2010/09/09/utiliser-les-fonctions-jstl-avec-lel-de-jsf/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 12:03:49 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSTL]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=175</guid>
		<description><![CDATA[La JSTL est très utile dans le développements des pages JSP et JSF. Elle permet d&#8217;avoir à disposition une multitude de fonctionnalités sans avoir à repasser par une classe Java (opérations sur les dates, les chaines de caractères, etc.) voici un lien vers la javadoc : http://download.oracle.com/docs/cd/E17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/index.html. Pour utiliser ces fonctions dans une page JSF [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">La JSTL est très utile dans le développements des pages JSP et JSF. Elle permet d&#8217;avoir à disposition une multitude de fonctionnalités sans avoir à repasser par une classe Java (opérations sur les dates, les chaines de caractères, etc.) voici un lien vers la javadoc : <a href="http://download.oracle.com/docs/cd/E17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/index.html" target="_blank">http://download.oracle.com/docs/cd/E17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/index.html</a>. Pour utiliser ces fonctions dans une page JSF avec du JSP :</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;%@ page contentType=&quot;text/html&quot; %&gt;
&lt;%@ taglib prefix=&quot;fn&quot; uri=&quot;http://java.sun.com/jsp/jstl/functions&quot; %&gt;
&lt;html&gt;
     &lt;h:outputText value=&quot;${fn:toLowerCase('CALIFORNIA')}&quot;/&gt;
&lt;/html&gt;
</pre>
<p style="text-align: justify">Pour utiliser ces mêmes fonctions dans une page avec Facelets :</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
      xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
      xmlns:h=&quot;http://java.sun.com/jsf/html&quot;
      xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
      xmlns:z=&quot;http://www.qualcomm.com/jsf/core&quot;
      xmlns:c=&quot;http://java.sun.com/jstl/core&quot;
      xmlns:fn=&quot;http://java.sun.com/jsp/jstl/functions&quot;&gt;
          &lt;h:outputText value=&quot;#{fn:toLowerCase('CALIFORNIA')}&quot;/&gt;
&lt;/html&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2010/09/09/utiliser-les-fonctions-jstl-avec-lel-de-jsf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facelets et JSTL</title>
		<link>http://everythingiswrong.free.fr/index.php/2010/06/06/facelets-et-jstl/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2010/06/06/facelets-et-jstl/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 15:00:29 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSTL]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=147</guid>
		<description><![CDATA[Il est important de savoir que l&#8217;utilisation de Facelets est compatible avec l&#8217;utilisation de certaines fonctionnalités de la JSTL. En lisant la documentation de Facelets, j&#8217;ai découvert que seulement cinq fonctions sont implémentées : c:if c:forEach c:catch c:set J&#8217;ai aussi remarqué que leurs utilisations n&#8217;est pas toujours possible. Par exemple, il n&#8217;est pas possible de [...]]]></description>
			<content:encoded><![CDATA[<p>Il est important de savoir que l&#8217;utilisation de Facelets est compatible avec l&#8217;utilisation de certaines fonctionnalités de la <a href="http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html" target="_blank">JSTL</a>.</p>
<p style="margin-bottom:0px;">En lisant la documentation de <a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html#taglib-available-jstl" target="_blank">Facelets</a>, j&#8217;ai découvert que seulement cinq fonctions sont implémentées :</p>
<ul  style="margin-bottom:10px;">
<li>c:if</li>
<li>c:forEach</li>
<li>c:catch</li>
<li>c:set</li>
</ul>
<p>J&#8217;ai aussi remarqué que leurs utilisations n&#8217;est pas toujours possible. Par exemple, il n&#8217;est pas possible de demander un c:if dans un ui:repeat. Dans ce cas, j&#8217;ai du remplacé le ui:repeat par un c:forEach pour que mon instruction conditionnelle soit prise en compte.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2010/06/06/facelets-et-jstl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
