<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - OButterlin</title>
		<link>https://www.developpez.net/forums/blogs/126553-obutterlin/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Wed, 08 Apr 2026 17:40:17 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - OButterlin</title>
			<link>https://www.developpez.net/forums/blogs/126553-obutterlin/</link>
		</image>
		<item>
			<title><![CDATA[Externalisation d'une bibliothèque de composite-components]]></title>
			<link>https://www.developpez.net/forums/blogs/126553-obutterlin/b740/externalisation-d-bibliotheque-composite-components/</link>
			<pubDate>Mon, 14 Sep 2015 09:42:57 GMT</pubDate>
			<description>Les composite-components...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Les composite-components représentent un moyen à la fois simple et élégant de partager des comportements et/ou des représentations d'informations. <br />
On les définit très simplement dans un projet JSF2 en les incluant dans le sous-répertoire /WEB-INF/resources/component/. <br />
Ils sont alors utilisables par l'application par l'intermédiaire de leur nom de domaine, comme ceci<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td valign="top"><pre style="margin: 0">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
   <font color="#008000"> xmlns:util=&quot;http://java.sun.com/jsf/composite/component&quot;</font>
    xmlns:h=&quot;http://java.sun.com/jsf/html&quot;
    xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
    xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
    xmlns:p=&quot;http://primefaces.org/ui&quot;
    xmlns:c=&quot;http://java.sun.com/jsp/jstl/core&quot;&gt;

...
    <font color="#008000">&lt;util:unCompositeComponent … /&gt;
</font>...

&lt;/html&gt;</pre></td></tr></table></pre>
</div>Cette utilisation est extrêmement simple mais il manque une approche majeure : la possibilité de partager une bibliothèque de composants avec plusieurs projets. <br />
Pour ce faire, il faut externaliser les composants sous forme de fichier jar. <br />
Ce jar sera inclus dans tous les projets demandeurs qui n'auront plus qu'à utiliser les composants via le nom de domaine de la bibliothèque de la même manière que s'ils avaient été placés dans le répertoire /WEB-INF/resources/component/.  <br />
<br />
<b>Comment procéder</b>  <br />
<br />
Créez un projet java simple avec la structure suivante : <br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:144px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0">
projet-composite
   src
      componentsResources.properties
   META-INF
      resources
         component
            unCompositeComponent.xhtml
      faces-config.xml</pre></td></tr></table></pre>
</div>Le fichier <font color="#579d1c"><b>faces-config.xml</b></font> permet de forcer le traitement des annotations JSF2 du jar de composants. Le répertoire <font color="#579d1c"><b>src</b></font> dépend de votre besoin d'intégrer du code ou des fichiers de propriétés à vos composants. Exemple de faces-config.xml :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:192px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td valign="top"><pre style="margin: 0">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;faces-config version=&quot;2.0&quot; xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;
    xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd&quot;&gt;

    &lt;application&gt;
        &lt;locale-config&gt;
            &lt;default-locale&gt;fr&lt;/default-locale&gt;
            &lt;supported-locale&gt;fr&lt;/supported-locale&gt;
            &lt;supported-locale&gt;en&lt;/supported-locale&gt;
        &lt;/locale-config&gt;
    &lt;/application&gt;
&lt;/faces-config&gt;</pre></td></tr></table></pre>
</div>Dans notre exemple, il ne fait que référencer les fichiers de propriétés qui seront utilisés pour les constantes texte des composants, mais il pourrait être vide. <br />
Si vos composants font référence à d'autres classes ou fichiers, n'oubliez pas que le ClassLoader est celui de l'application utilisatrice, il faut en tenir compte si par exemple on fait référence à des chemins relatifs. <br />
<br />
Lorsque l'implémentation de vos composants est terminée, vous n'avez plus qu'à créer un jar à partir de votre projet. <br />
Avec Eclipse, le plus simple est de faire un click droit sur le projet &#8594; Export... &#8594; JAR file et de suivre la procédure. <br />
<br />
Vous n'avez plus qu'à intégrer votre jar à vos projets JSF2 pour les utiliser.Pour plus d'informations sur ce qui est de la conception de composite-components, je vous propose de lire mon tutoriel sur les <a href="http://olivier-butterlin.developpez.com/tutoriels/jsf/introduction-composite-component/" target="_blank">Composite-Components de JSF2</a></blockquote>

]]></content:encoded>
			<dc:creator>OButterlin</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/126553-obutterlin/b740/externalisation-d-bibliotheque-composite-components/</guid>
		</item>
	</channel>
</rss>
