<?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; weblets</title>
	<atom:link href="http://everythingiswrong.free.fr/index.php/tag/weblets/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>weblets</title>
		<link>http://everythingiswrong.free.fr/index.php/2010/07/02/weblets/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2010/07/02/weblets/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 20:04:20 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Facelets]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[weblets]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=159</guid>
		<description><![CDATA[Chargement des ressources incluses dans les JAR d'une WEBAPP.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En travaillant sur une librairie JSF faite maison, j&#8217;ai rapidement souhaité packager des fichiers CSS et des images. Avec richFaces, il est possible de charger un fichier CSS se situant dans un JAR avec le composant <a href="http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/a4j_loadStyle.html" target="_blank">&lt;a4j:loadStyle /&gt;</a>, mais je n&#8217;ai pas trouvé la même fonctionnalité pour récupérer une image packagée dans un JAR. C&#8217;est alors que j&#8217;ai découvert <a href="https://weblets.dev.java.net/" target="_blank">weblets</a> :</p>
<p style="text-align: justify; padding-left: 30px;"><em>Component libraries for web application frameworks often need to provide resource files along with     implementation classes. For example, JavaServer Faces Renderers often need JavaScript, CSS and image resources.</em></p>
<p>Il s&#8217;agit donc d&#8217;un framework qui met à la disposition d&#8217;une application web les ressources contenues dans un JAR &#8220;tag-librairie&#8221;. Cette technologie est compatible avec JSF, JSP, JavaScript, CSS, etc. Elle est utilisable dans une application basée sur JSF ou sur des servlets.</p>
<h1>La librairie</h1>
<p>Il n&#8217;y a qu&#8217;une seule règle à suivre pour le packaging de la librairie : le fichier de configuration <em>weblets-config.xml</em> doit être dans le répertoire <em>META-INF</em>. Voici un exemple de fichier de configuration :</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;
    &lt;web-app&gt;
      &lt;description&gt;Weblets Demo&lt;/description&gt;

      &lt;servlet&gt;
        &lt;servlet-name&gt;Weblets Servlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;net.java.dev.weblets.WebletsServlet&lt;/servlet-class&gt;
      &lt;/servlet&gt;

      &lt;!-- The  Weblets servlet mapping must be path based otherwise  Weblets will fail! --&gt;
      &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;Weblets Servlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/weblets/*&lt;/url-pattern&gt;
      &lt;/servlet-mapping&gt;

    &lt;/web-app&gt;
</pre>
<p style="text-align: justify;">Ce fichier ressemble étrangement au fichier <em>web.xml</em>. Ici, toutes les ressources qui sont dans le package <em>org.myapp.faces.renderer.html.resources</em> seront disponibles à l&#8217;adresse <em>http://&#8230;../root-webapp-context/faces/weblets/myressources/*</em>. Le nom de la weblet est <em>myweblet</em>. Il peut y avoir plusieurs weblets dans un même fichier de configuration.</p>
<p style="text-align: justify;">Je n&#8217;aime pas la paraphrase, vous trouverez toutes les explications utiles à cette adresse : <a href="https://weblets.dev.java.net/doc_11/longdoc/packingweblets.html" target="_blank">https://weblets.dev.java.net/doc_11/longdoc/packingweblets.html</a></p>
<h1>Mise en place sur une application web JSF</h1>
<p style="text-align: justify;margin-bottom:0px;">Dans une application JSF, la weblets se déploie automatiquement. Il n&#8217;y a que deux limitations :</p>
<ul style="margin-bottom:10px;">
<li style="text-align: justify;">Utiliser la servlet JSF de l&#8217;implémentation de référence :  <em>javax.faces.webapp.FacesServlet</em></li>
<li style="text-align: justify;">Utiliser le mapping de servlet JSF <em>/faces/*</em></li>
</ul>
<p style="text-align: justify;">Voici un exemple de fichier <em>web.xml</em> :</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;
&lt;web-app&gt;
  &lt;description&gt;Weblets Demo&lt;/description&gt;

  &lt;servlet&gt;
    &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
    &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  &lt;/servlet&gt;

  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;

&lt;/web-app&gt;</pre>
<p>Si vous utiliser Seam comme moi, votre mapping de servlet est certainement <em>*.seam</em>. Il faut s&#8217;avoir qu&#8217;il est possible de définir plusieurs mappings différents sans aucun problème. Pour plus d&#8217;explication je vous invite à visiter la documentation officielle : <a href="https://weblets.dev.java.net/doc_11/longdoc/setup.html" target="_blank">https://weblets.dev.java.net/doc_11/longdoc/setup.html</a></p>
<h1>Utilisation dans l&#8217;application JSF</h1>
<p>L&#8217;utilisation dans votre application JSF est très simple. Dans une page facelets :</p>
<p>#{weblet.url['weblets.demo']['/welcome.js']} &lt;!&#8211; avec weblets.demo = le nom de la weblet et /welcome.js le chemin de la resource &#8211;&gt;</p>
<p>Dans un fichier CSS :</p>
<pre class="brush: css; title: ; notranslate">
background-image: url( weblet:resource( &quot;weblets.demo&quot; , &quot;/myimage.png&quot; ) );
</pre>
<h1>Maven</h1>
<p>Enfin, comme toute librairie qui se respecte, voici comment l&#8217;utiliser avec maven : Ajouter le repository java.net à votre pom.xml :</p>
<div class="source">
<pre class="brush: xml; title: ; notranslate">
&lt;repository&gt;
 &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
 &lt;name&gt;Java.net Repository for Maven&lt;/name&gt;
 &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
 &lt;layout&gt;default&lt;/layout&gt;
 &lt;/repository&gt;
&lt;pre&gt;</pre>
</div>
<p>Ajouter les deux dépendances suivantes :</p>
<div class="source">
<pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
 &lt;groupId&gt;net.java.dev.weblets&lt;/groupId&gt;
 &lt;artifactId&gt;weblets-api&lt;/artifactId&gt;
 &lt;version&gt;1.1&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;net.java.dev.weblets&lt;/groupId&gt;
 &lt;artifactId&gt;weblets-impl&lt;/artifactId&gt;
 &lt;version&gt;1.1&lt;/version&gt;
 &lt;/dependency&gt;
</pre>
<p style="text-align: justify;">Pour terminer cet article, j&#8217;ajouterai que j&#8217;ai eu beaucoup de difficultés pour mettre en place ma librairie car la documentation n&#8217;est pas tout à fait correcte ou plutôt, elle induit en erreur le développeur de temps en temps. Il ne faut pas avoir peur de checkouter les sources pour s&#8217;inspirer des exemples, la racine du repository subversion est : <em>https://weblets.dev.java.net/svn/weblets</em> avec l&#8217;utilisateur <em>guest</em> sans mot de passe. Cela vous fera certainement gagner du temps.</p>
</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<pre>org.myapp.faces.renderer.html.resources</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2010/07/02/weblets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
