<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-9134888110108394290</id><updated>2009-11-09T07:58:16.430-08:00</updated><title type='text'>f.pfister</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>François Pfister</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-6008339078602495842</id><published>2007-12-19T06:44:00.000-08:00</published><updated>2008-01-15T12:51:01.098-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat developer studio'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss developer studio'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss as'/><category scheme='http://www.blogger.com/atom/ns#' term='europa'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='visualeditor'/><category scheme='http://www.blogger.com/atom/ns#' term='visual editor'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse extension'/><title type='text'>Exit Redhat Developer Studio</title><content type='html'>A peine le temps d'essayer Redhat Developer Studio, de passer de la version bêta à la candidate release 1, le produit s'appelle maintenant JBoss Developer Studio, il est devenu payant (99$).&lt;br /&gt;&lt;br /&gt;Cependant, tous les composants restent gratuits, on peut facilement les assembler manuellement, et malgré la baisse du dollar, c'est encore intéressant de gagner 99$ en 15 minutes. De plus, la procédure décrite ci-dessous permet de mettre à jour une installation d'Eclipse déjà existante, et aussi de remplacer la version des JBossTools par un version plus récente, ou de partager une installation des JBossTools par plusieurs installations d'Eclipse.&lt;br /&gt;&lt;a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20071103/eclipse-jee-europa-fall2-win32.zip"&gt;Téléchargez Eclipse Europa&lt;/a&gt;&lt;br /&gt;dézippez cette archive dans un répertoire &amp;lt;eclipse&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://downloads.sourceforge.net/jboss/JBossTools-2.0.0.GA-ALL-win32.zip"&gt;Téléchargez JBossTools-2.0.0&lt;/a&gt;&lt;br /&gt;dézippez cette archive dans un répertoire &amp;lt;jbosstools&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://downloads.sourceforge.net/jboss/jboss-4.2.2.GA.zip"&gt;Téléchargez JBoss 4.2.2&lt;/a&gt;&lt;br /&gt;dézippez cette archive dans un répertoire &amp;lt;jbossas&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Installez Eclipse&lt;/span&gt;&lt;br /&gt;Eclipse est déjà installé dans le répertoire &amp;lt;eclipse&amp;gt; sans opération supplémentaire.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installez JBossTools&lt;/span&gt;&lt;br /&gt;Dans &amp;lt;jbosstools&amp;gt;\eclipse, créez un fichier nommé .eclipseextension&lt;br /&gt;(sous windows, dans une console msdos, tapez:  echo "" &gt; .eclipseextension)&lt;br /&gt;Démarrez Eclipse&lt;br /&gt;menu Help/Software Updates/Manage Configuration/Eclipse Platform/Add/Extension Location&lt;br /&gt;choisissez le répertoire &amp;lt;jbosstools&amp;gt;\eclipse&lt;br /&gt;Relancez Eclipse, les jboss tools sont installées.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installez JBoss 4.2.2&lt;/span&gt;&lt;br /&gt;exemple: si &amp;lt;jbossas&amp;gt; est E:\dev\java\jbossas, le serveur sera ici: E:\dev\java\jbossas\jboss-4.2.2.GA&lt;br /&gt;Déclarez le serveur dans Eclipse:&lt;br /&gt;Window/Preferences/Server/Installed Runtimes/Add/JBoss v4.2&lt;br /&gt;Next/Application Server Directory=&amp;lt;jbossas&amp;gt;\jboss-4.2.2.GA&lt;br /&gt;&lt;br /&gt;Afficher la console JBoss:&lt;br /&gt;Window/Show View/Server/JBoss Server View&lt;br /&gt;&lt;br /&gt;Sauvegarder cette console&lt;br /&gt;Window/Save Perspective as...&lt;br /&gt;&lt;br /&gt;Dans la console, bouton droit/New Server/JBoss AS 4.2&lt;br /&gt;Next/Home Directory/&amp;lt;jbossas&amp;gt;\jboss-4.2.2.GA&lt;br /&gt;Configuration:default&lt;br /&gt;Next/next/Finish&lt;br /&gt;Bouton droit sur le serveur ainsi créé/start&lt;br /&gt;Ouvrez un navigateur à l'adresse http://localhost:8080/ pour constater le bon fonctionnement du serveur.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Créez un projet jsf&lt;/span&gt;&lt;br /&gt;File/New/Other/JBoss Tools Web/JSF/JSF project&lt;br /&gt;Project Name:jsftest&lt;br /&gt;JSF Environement: JSF 1.2&lt;br /&gt;Template: JSFKickStartWithoutLibs&lt;br /&gt;Next/Finish&lt;br /&gt;&lt;br /&gt;Racine du projet jsftest/clic droit/Run As/Run on server&lt;br /&gt;On doit voir une page Hello Demo Application dans le navigateur.&lt;br /&gt;&lt;br /&gt;Attention, lorsqu'on modifie du code java, il faut redéployer l'application. Dans l'onglet JBoss Server View, deuxième volet, modules/[nom du projet], bouton droit sur Full Publish&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;P-S&lt;/span&gt;&lt;br /&gt;Après enquête approfondie, &lt;a href="ftp://ftp.redhat.com/pub/redhat/rhdevstudio/beta/rhdevstudio-1.0-CR1/rhdevstudio-win32-1.0.0.CR1.jar"&gt;Redhat Developer Studio&lt;/a&gt;  est encore disponible gratuitement &lt;a href="ftp://ftp.redhat.com/pub/redhat/rhdevstudio/beta/rhdevstudio-1.0-CR1/rhdevstudio-win32-1.0.0.CR1.jar"&gt;ici&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;P-P-S&lt;/span&gt;&lt;br /&gt;Pour utiliser VisualEditor (développement swing et swt)  pourtant notoirement incompatible avec Europa, installez le plugin modifié &lt;a href="http://www.ehecht.com/eclipse_ve/ve.html"&gt;ici&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-6008339078602495842?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/6008339078602495842/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=6008339078602495842' title='13 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/6008339078602495842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/6008339078602495842'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/12/exit-redhat-developer-studio.html' title='Exit Redhat Developer Studio'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-8898188730715672638</id><published>2007-11-29T05:01:00.000-08:00</published><updated>2007-11-29T06:43:49.309-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='dalvik'/><category scheme='http://www.blogger.com/atom/ns#' term='j2me'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Android_%28mobile_phone_platform%29"&gt;Android&lt;/a&gt; est une plate-forme de logiciel mobile basée sur Linux, promue par &lt;a href="http://code.google.com/android/"&gt;Google&lt;/a&gt; et l'&lt;a href="http://www.openhandsetalliance.com/"&gt;Open Handset Alliance&lt;/a&gt;, consortium qui rassemble 34 industriels.&lt;br /&gt;L'ensemble du modèle est open-source (licence Apache 2).&lt;br /&gt;Le kit de développement est disponible.&lt;br /&gt;Les applications sont développées en java. En effet, l'api J2ME a été portée sur Android, la machine virtuelle n'est pas une JVM mais une VM spécifique nommée &lt;a href="http://en.wikipedia.org/wiki/Dalvik_virtual_machine"&gt;Dalvik&lt;/a&gt;, ce qui permet à Google de contourner la licence protégeant J2ME.&lt;br /&gt;Un &lt;a href="http://code.google.com/android/download.html"&gt;émulateur&lt;/a&gt; Windows/Mac/Linux est disponible.&lt;br /&gt;Sans préjuger des batailles juridiques qui semblent inévitables, &lt;a href="http://code.google.com/android/adc.html"&gt;Google Android Challenge&lt;/a&gt; est un concours qui récompense les meilleures applications sur la plate-forme Android. Une somme de 10 millions de dollars est annoncée par Google.&lt;br /&gt;A vos claviers!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.androidfrance.org/"&gt;lancement d'un kit pour développeurs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dicodunet.com/dossiers/google-android.html"&gt;dicodunet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://android-after-all.fr/index.php/date/2007/11/22/"&gt;android-after-all&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openhandsetalliance.com/"&gt;openhandsetalliance.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://googleblog.blogspot.com/2007/11/wheres-my-gphone.html"&gt;googleblog.blogspot.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.betaversion.org/%7Estefano/linotype/news/110/"&gt;Dalvik: how Google routed around Sun's IP-based licensing restrictions on Java ME&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-8898188730715672638?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/8898188730715672638/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=8898188730715672638' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/8898188730715672638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/8898188730715672638'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/android.html' title='Android'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-8650168668528708446</id><published>2007-11-22T10:00:00.000-08:00</published><updated>2007-12-18T23:43:06.881-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jee 2007-2008'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Java Enterprise Edition</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Objectif &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Se former sur les technologies web en java&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Modalités&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Ratio:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;30% de théorie - 70% de pratique&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Outils utilisés:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Eclipse, Netbeans, Jboss&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Durée:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;32 heures&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Evaluation:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;par binôme, dossier de projet et démo lors de la dernière séance.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Cours&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Les technologies JEE5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;TP&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Appréhender les outils de développement&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Appréhender les technologies jsp-servlet-jsf-jpa etc...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Rédiger une spécification fonctionnelle simplifiée&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Concevoir un modèle métier simplifié (6 classes)&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Banque&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Client&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Compte&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Compte-epargne&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Compte-courant&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Ville&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Implémenter les classes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Réaliser des jeux de test unitaire&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Concevoir l'architecture technique (serveur web)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Réaliser le serveur web&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Concevoir l'interface utilisateur&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Choisir la technologie de persistance des objets métier&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Coder les classes d'accès aux données&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Intégration et tests&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;     &lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Supports de cours&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/ppt/introduction.ppt"&gt;&lt;span style="font-family:verdana;"&gt;introduction.ppt&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/ppt/jee5-jsp.ppt"&gt;&lt;span style="font-family:verdana;"&gt;jee5-jsp.ppt&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/ppt/jee5-jsf.ppt"&gt;&lt;span style="font-family:verdana;"&gt;jee5-jsf(1).ppt&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/ppt/jee5-jsf2.ppt"&gt;&lt;span style="font-family:verdana;"&gt;jee5-jsf(2).ppt&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Supports de tp&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/html/jee-servlet/jee-servlet.html"&gt;&lt;span style="font-family:verdana;"&gt;tp1:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; jee-servlet&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/html/jee-jsf/tp2.html"&gt;&lt;span style="font-family:verdana;"&gt;tp2:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; jee-jsf&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/html/jee-validateurs/tp3.html"&gt;&lt;span style="font-family:verdana;"&gt;tp3:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; convertisseurs-validateurs-événements&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/docs/tp-changelistener.doc"&gt;tp3:  bis valuechangelistener et cycle de vie&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fpfister.blogspot.com/2007/11/tp-application-bancaire-simplifie.html"&gt;tp4: modèle du domaine avec de simples beans: Application bancaire&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fpfister.blogspot.com/2007/11/tp-crud-create-retrieve-update-delete.html"&gt;tp5: crud: navigation dans le modèle et mise à jour des données&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/docs/tp6-hsqldb.doc"&gt;&lt;span style="font-family:verdana;"&gt;tp6: base de données relationnelle Hypersonic&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/docs/tp7-jdbc-mapping.doc"&gt;&lt;span style="font-family:verdana;"&gt;tp7: a) jdbc, introduction au mapping objet-relationnel&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://fichiers.partage.free.fr/docs/tp9-install-rhdev-db.doc"&gt;&lt;span style="font-family:verdana;"&gt;tp7: b) JBoss et sa base de données interne Hsqldb&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/docs/tp8-jpa.doc"&gt;&lt;span style="font-family:verdana;"&gt;tp8: mise en oeuvre de JPA (Java Persistence Api)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/docs/tp-simplebank/tp-simple-bank.html"&gt;&lt;span style="font-family:verdana;"&gt;tp10: modèle du domaine simplifié&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/docs/uml-simplifie.JPG"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp12: modèle du domaine simplifié (jpa+hibernate+dao+web)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Corrigés de tp&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp2-datatable-form.zip"&gt;&lt;span style="font-family:verdana;"&gt;tp2: datatable, formulaire&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp3-convertisseurs-validateurs.zip"&gt;&lt;span style="font-family:verdana;"&gt;tp3a: convertisseurs, validateurs&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp3b-listener-lifecycle.zip"&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp3b: listeners, lifecycle&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp-lifecycle.zip"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp3b: v2 listeners, lifecycle&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/files/tp-banque-corrige.zip"&gt;tp4: &lt;/a&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/files/tp-banque-corrige.zip"&gt;modèle du domaine avec de simples beans: Application bancaire&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/files/tp-crud.zip"&gt;tp5: crud&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp-jpa.zip"&gt;&lt;span style="font-family:verdana;"&gt;tp8: mise en oeuvre de JPA&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp-banque-model.zip"&gt;&lt;span style="font-family:verdana;"&gt;tp10: v1 - modèle du domaine simplifié (simples javabeans)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp-banque-jpa-web.zip"&gt;&lt;span style="font-family:verdana;"&gt;tp10: v2 - modèle du domaine simplifié (jpa+hibernate)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp11.zip"&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp11: modèle du domaine simplifié (jpa+hibernate+web)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp11-2.zip"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp11: modèle du domaine simplifié (jpa+hibernate+web sans libs)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp12-b.zip"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;tp12: modèle du domaine simplifié (jpa+hibernate+&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;dao+&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://fichiers.partage.free.fr/files/corrige-tp12-b.zip"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-family:verdana;"&gt;web)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;MyFaces&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://f.pfister.free.fr/institut2008/html/jee-servlet/jee-servlet.html"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a style="font-family: verdana;" href="http://fpfister.blogspot.com/2007/11/myfaces-et-jboss-42.html"&gt;tp JBoss-MyFaces&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fpfister.blogspot.com/2007/11/installer-les-exemples-myfaces.html"&gt;tp MyFaces-exemples&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:verdana;"&gt;Bibliothèques JEE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/files/jpa-lib.zip"&gt;hibernate&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://fichiers.partage.free.fr/files/jpa-db.zip"&gt;hsqldb&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-8650168668528708446?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/8650168668528708446/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=8650168668528708446' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/8650168668528708446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/8650168668528708446'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/java-enterprise-edition.html' title='Java Enterprise Edition'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-4467467303162432873</id><published>2007-11-22T05:07:00.000-08:00</published><updated>2007-11-30T05:15:48.953-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crud'/><category scheme='http://www.blogger.com/atom/ns#' term='jee 2007-2008'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>TP: Crud Create-Retrieve-Update-Delete</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Architecture&lt;br /&gt;&lt;/span&gt;L'application est vue comme un modèle de données du domaine fortement structuré et typé et couplé.&lt;br /&gt;&lt;br /&gt;Cette couche métier à caractère statique côtoie une couche d'interface utilisateur (swing, html, jsp, dans notre cas jsf), ainsi qu'une couche applicative constituée par les contrôleurs, à caractère dynamique.&lt;br /&gt;&lt;br /&gt;Ce modèle du domaine est bien découplé des deux autres couches, ainsi que des couches techniques (persistance par exemple).&lt;br /&gt;&lt;br /&gt;Dans le cas où le modèle est connecté avec un ou plusieurs modèles externes, cette connection s'effectuera au travers d'une API consitutée d'interfaces.&lt;br /&gt;&lt;br /&gt;Les classes métier comportent des règles-métier de base (l'âge d'un personne ne peut être négatif....)&lt;br /&gt;Les contrôleurs comportent des règles métier applicatives (on ne peut changer de département pour telle adresse, le solde du compte ne peut être inférieur à une limite autorisée).&lt;br /&gt;&lt;br /&gt;Développer une application revient à concevoir et à coder le modèle statique, la mécanique navigationnelle (Crud = create-retrieve-update-delete), les règles de gestion et les exceptions-métier, l'interface utilisateur, après avoir choisi une infrastructure technique (jsf dans notre cas) et une solution de persistance du modèle (jdbc, hibernate, ejb, etc...), conformément aux spécifications fonctionnelles qui auront été rédigées pour satisfaire le besoin.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Organisation du code&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;La première tâche est de structurer le projet.&lt;br /&gt;Les classes de l'application se situent dans un package bank. Les classes du modèle dans un package bank.model. Les exceptions métier ont également un package réservé, ainsi que les contrôleurs.&lt;br /&gt;&lt;br /&gt;L'organisation du code proposée est le fruit d'un parti-pris architectural, et n'est en rien obligatoire. Cependant, cette méthode met en évidence le modèle MVC sous-jacent à JSF, et tend à établir une bonne pratique.&lt;br /&gt;&lt;br /&gt;Les contrôleurs sont au nombre d'un par entité, ils ont tous la même structure.&lt;br /&gt;Les composants graphiques sont extraits des contrôleurs et placés dans une classe View (package bank.view).&lt;br /&gt;Les vues sont génériques, il ne doit pas y avoir d'adhérence au modèle, sauf décision de conception différente.&lt;br /&gt;&lt;br /&gt;Afin d'éviter l'adhérence au modèle, on utilise éventuellement des classes utilitaires afin de peupler certains composants (voir classe KeyValuePair par exemple).&lt;br /&gt;&lt;br /&gt;Les classes du modèle ne doivent comporter aucune adhérence aux contrôleurs ni aux vues. Vérifiez le en examinant la liste des imports.&lt;br /&gt;&lt;br /&gt;L'organisation proposée n'est pas totalement aboutie. Il sera nécessaire, par la suite, de déresponsabiliser les contrôleurs des fonctionalités de navigation dans le modèle(crud). Ces fonctionnalités seront, plus tard, confiées à des classes DAO (Data Access Object), les contrôleurs conservant simplement une fonction d'aiguilleur.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Structure du projet&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_IoKMiXD0QB4/R0WD4jakRfI/AAAAAAAAADE/gEp9j0F4KM4/s1600-h/tp-banque-conception_html_m4d3e967b.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_IoKMiXD0QB4/R0WD4jakRfI/AAAAAAAAADE/gEp9j0F4KM4/s400/tp-banque-conception_html_m4d3e967b.gif" alt="" id="BLOGGER_PHOTO_ID_5135655957688501746" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Interface utilisateur&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IoKMiXD0QB4/R0WGGzakRgI/AAAAAAAAADM/SENv9w_iT6E/s1600-h/tp-banque-conception_html_m58f621bd.gif"&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_IoKMiXD0QB4/R0WGGzakRgI/AAAAAAAAADM/SENv9w_iT6E/s400/tp-banque-conception_html_m58f621bd.gif" alt="" id="BLOGGER_PHOTO_ID_5135658401524893186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_IoKMiXD0QB4/R0WHkTakRhI/AAAAAAAAADU/QTB3pC_X3Ks/s1600-h/tp-banque-conception_html_m1d365c77.gif"&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_IoKMiXD0QB4/R0WHkTakRhI/AAAAAAAAADU/QTB3pC_X3Ks/s400/tp-banque-conception_html_m1d365c77.gif" alt="" id="BLOGGER_PHOTO_ID_5135660007842661906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Exemples de code&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;dans bankControler:&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;public ListView getView() {&lt;br /&gt;       if (!viewInit){&lt;br /&gt;           viewInit=true;&lt;br /&gt;           List&lt;keyvaluepair&gt; options = new ArrayList&lt;keyvaluepair&gt;();&lt;br /&gt;           for (Iterator&lt;city&gt; i = bankApp.getCities().iterator(); i.hasNext();) {&lt;br /&gt;               City city =  i.next();&lt;br /&gt;               KeyValuePair v = new KeyValuePair();&lt;br /&gt;               v.key = city.getId();&lt;br /&gt;               v.value = city.getName();&lt;br /&gt;               options.add(v);&lt;br /&gt;           }&lt;br /&gt;           view.initOptions(options);&lt;br /&gt;       }&lt;br /&gt;       return view;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;public void zipChanged(ValueChangeEvent event) {&lt;br /&gt;         currentBank.setCity(bankApp.getCityById(Integer.parseInt(event.getNewValue().toString())));&lt;br /&gt;       FacesContext.getCurrentInstance().renderResponse();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;dans ListView&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;public void initOptions(List&lt;keyvaluepair&gt; values) {&lt;br /&gt;    items = new ArrayList&lt;selectitem&gt;();&lt;br /&gt;    for (Iterator i = values.iterator(); i.hasNext();) {&lt;br /&gt;        KeyValuePair v = (KeyValuePair) i.next();&lt;br /&gt;        items.add(new SelectItem(Integer.toString(v.key), v.value));   &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;la classe KeyValuePair&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;public class KeyValuePair {&lt;br /&gt; public int key;&lt;br /&gt; public String value;&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;dans bankForm.jsp&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt;&lt;h:outputlabel for="city" value="ville"&gt;&lt;br /&gt;  &lt;h:panelgroup&gt;&lt;br /&gt;     &lt;h:selectonemenu id="city" value="#{bankControler.currentBank.city.id}" immediate="true" styleclass="selectOneMenu" onchange="submit()" valuechangelistener="#{bankControler.zipChanged}"&gt;&lt;br /&gt;    &lt;f:selectitem itemvalue="" itemlabel="choose"&gt;&lt;br /&gt;    &lt;f:selectitems value="#{bankControler.zipItems}"&gt;&lt;br /&gt;     &lt;/h:selectOneMenu&gt;&lt;br /&gt;     &lt;h:message for="city" styleclass="error" showdetail="true" showsummary="false"&gt;&lt;br /&gt;  &lt;/h:panelGroup&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fichiers.partage.free.fr/files/tp-crud.zip"&gt;corrigé ici&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-4467467303162432873?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/4467467303162432873/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=4467467303162432873' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4467467303162432873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4467467303162432873'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/tp-crud-create-retrieve-update-delete.html' title='TP: Crud Create-Retrieve-Update-Delete'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_IoKMiXD0QB4/R0WD4jakRfI/AAAAAAAAADE/gEp9j0F4KM4/s72-c/tp-banque-conception_html_m4d3e967b.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-4022542535947333817</id><published>2007-11-21T01:05:00.000-08:00</published><updated>2007-11-29T07:01:44.008-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Frameworks JSF - Ajax</title><content type='html'>&lt;ul&gt;&lt;li&gt;Outre les bibiliothèques référencées par &lt;a hreflang="fr" href="http://www.jsfmatrix.net/"&gt;jsfmatrix&lt;/a&gt; déjà citées, voici deux autres bibliothèques JSF basées sur Ajax&lt;/li&gt;&lt;li&gt;Les composants Yahoo: &lt;a hreflang="fr" href="http://yui4jsf.sourceforge.net/site/index.html"&gt;Yui4jsf&lt;/a&gt;  &lt;a href="http://www.nightdev.devisland.net/yui4jsf-examples/main.jsf"&gt;démo&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;Un framework Sun: &lt;a hreflang="fr" href="https://ajax.dev.java.net/"&gt;jMaki&lt;/a&gt;  &lt;a href="http://webdev2.sun.com/jsf-jmaki/home.jsf"&gt;démo&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-4022542535947333817?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/4022542535947333817/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=4022542535947333817' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4022542535947333817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4022542535947333817'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/frameworks-jsf-ajax.html' title='Frameworks JSF - Ajax'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-3684699174344458461</id><published>2007-11-06T16:12:00.000-08:00</published><updated>2007-11-30T05:17:20.056-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jee 2007-2008'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>TP: Application bancaire simplifiée</title><content type='html'>L'exemple est tiré de Netbeans: &lt;span style="font-weight: bold;"&gt;UMLBankAppSample&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Spécifications:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'application permet de créer banques, des clients et des comptes bancaires.&lt;br /&gt;Les comptes sont de trois types:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Checking: compte courant&lt;/li&gt;&lt;li&gt;Saving: compte épargne&lt;/li&gt;&lt;li&gt;Platinum: compte de type carte de paiement&lt;/li&gt;&lt;/ul&gt;Tous les types de comptes ont les attributs suivants:&lt;br /&gt;&lt;br /&gt;double balance; // le solde&lt;br /&gt;String accountNumber; Le numéro de compte&lt;br /&gt;double interestRate; //un taux d'intérêt&lt;br /&gt;&lt;br /&gt;En outre ils possèdent un historique et ils sont liés à un client:&lt;br /&gt;&lt;br /&gt;History history;&lt;br /&gt;Customer customer;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le client possède plusieurs comptes et possède les attributs suivants:&lt;/li&gt;&lt;/ul&gt;int id;&lt;br /&gt;String name;&lt;br /&gt;String forName;&lt;br /&gt;String address;&lt;br /&gt;String zipCode;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le compte Checking est soumis à une pénalité en cas de découvert:&lt;/li&gt;&lt;/ul&gt;double overdraftPenalty = 25.00;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le Platinum possède une autorisation maxi et une réserve d'argent qui diminue en cas de retrait si le solde n'est pas suffisant.&lt;/li&gt;&lt;/ul&gt;static final double overdraftLimit = 2500.00;&lt;br /&gt;double availableFunds;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le compte Saving rapporte des intérêts quand le solde est positif.&lt;/li&gt;&lt;li&gt;La classe History possède un seul attribut qui compte les opérations:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;int transaction;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Créer un cas de test:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;     BankApplication app = new BankApplication();&lt;br /&gt;     System.out.println("-----Creating customers-----");&lt;br /&gt;       Customer c1 = new Customer(1,"Dupont","Jean","10, rue des lilas","30000");&lt;br /&gt;       app.add(c1);&lt;br /&gt;       Customer c2 = new Customer(2,"Poulain","Amélie","20, rue des mimosas","34000");&lt;br /&gt;       app.add(c2);&lt;br /&gt;       System.out.println("-----Creating accounts-----");&lt;br /&gt;        Checking checkingAccount1 = new Checking("1234",150);&lt;br /&gt;        app.add(checkingAccount1);&lt;br /&gt;        Saving savingAccount1 = new Saving("12399", 100,0.06);&lt;br /&gt;        app.add(savingAccount1);&lt;br /&gt;        Checking checkingAccount2 = new Checking("9234",1501);&lt;br /&gt;        app.add(checkingAccount2);&lt;br /&gt;        Saving savingAccount2 = new Saving("92399", 1000,0.07);&lt;br /&gt;        app.add(savingAccount2);&lt;br /&gt;        c1.addAccount(checkingAccount1);&lt;br /&gt;        c1.addAccount(savingAccount1);&lt;br /&gt;        c2.addAccount(checkingAccount2);&lt;br /&gt;        c2.addAccount(savingAccount2);&lt;br /&gt;        System.out.println("-----writings-----");&lt;br /&gt;        savingAccount1.deposit(700.00);&lt;br /&gt;        checkingAccount1.deposit(360.00); &lt;br /&gt;        checkingAccount1.deposit(10.00); &lt;br /&gt;        checkingAccount1.deposit(20.00); &lt;br /&gt;        try{&lt;br /&gt;            checkingAccount1.withdraw(10.00); &lt;br /&gt;            checkingAccount1.withdraw(20.00); &lt;br /&gt;            checkingAccount1.withdraw(60.00); &lt;br /&gt;        }&lt;br /&gt;        catch(Exception ex){&lt;br /&gt;         //ex.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        checkingAccount2.deposit(10.00);&lt;br /&gt;        try{&lt;br /&gt;            checkingAccount2.withdraw(10660.00); &lt;br /&gt;        }&lt;br /&gt;        catch(Exception ex){&lt;br /&gt;         //ex.printStackTrace();&lt;br /&gt;        }        &lt;br /&gt;        System.out.println("-----Bank Application balances-----");&lt;br /&gt;        System.out.print(app.toString());&lt;br /&gt;    }&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Créer un modèle de classes du domaine&lt;/span&gt; à base de simples javabeans (la persistence sera implémentée ultérieurement)&lt;br /&gt;&lt;br /&gt;A l'exécution du test , on obtient:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-----Creating customers-----&lt;br /&gt;-----Creating accounts-----&lt;br /&gt;Account created: Checking Account:        Number:  1234&lt;br /&gt;Balance:  150.0 history is empty&lt;br /&gt;Account created: Saving Account:        Number:  12399&lt;br /&gt;Balance:  100.0&lt;br /&gt;Account created: Checking Account:        Number:  9234&lt;br /&gt;Balance:  1501.0 history is empty&lt;br /&gt;Account created: Saving Account:        Number:  92399&lt;br /&gt;Balance:  1000.0&lt;br /&gt;-----writings-----&lt;br /&gt;1 Jean Dupont Saving Account:        12399 deposit 700.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 deposit 360.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 deposit 10.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 deposit 20.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 withdraw 10.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 withdraw 20.0&lt;br /&gt;1 Jean Dupont Checking Account:        1234 withdraw 60.0&lt;br /&gt;2 Amélie Poulain Checking Account:        9234 deposit 10.0&lt;br /&gt;2 Amélie Poulain Checking Account:        9234 withdraw 10660.0&lt;br /&gt;2 Amélie Poulain Checking Account:        9234 noAvailableFunds&lt;br /&gt;-----Bank Application balances-----&lt;br /&gt;1 Jean Dupont&lt;br /&gt;Checking Account:        Number:  1234&lt;br /&gt;Balance:  450.0    Transaction count is 3&lt;br /&gt;Saving Account:        Number:  12399&lt;br /&gt;Balance:  800.0&lt;br /&gt;------------&lt;br /&gt;2 Amélie Poulain&lt;br /&gt;Checking Account:        Number:  9234&lt;br /&gt;Balance:  1511.0 history is empty&lt;br /&gt;Saving Account:        Number:  92399&lt;br /&gt;Balance:  1000.0&lt;br /&gt;------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intégrer l'application dans une application web&lt;/span&gt;, au moyen d'un backing bean.&lt;br /&gt;&lt;br /&gt;Créer les pages permettant de naviguer dans l'application, de créer, de supprimer, modifier des banques, des clients, des comptes, et d'effectuer des opérations.&lt;br /&gt;Vérifier la non régression des règles de gestion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pour chaque entité&lt;/span&gt;, il faut prévoir une vue en liste basée sur une DataTable, et une vue d'édition basée sur un formulaire, voir &lt;a href="http://f.pfister.free.fr/institut2008/html/jee-jsf/tp2.html"&gt;tp jee-jsf&lt;/a&gt;  et &lt;a href="http://www.exadel.com/tutorial/jsf/jsftags-guide.html#column"&gt;guide de référence&lt;/a&gt;&lt;br /&gt;le modèle &lt;a href="http://fichiers.partage.free.fr/files/tp-banque.zip"&gt;ici&lt;/a&gt;.&lt;br /&gt;le corrigé v1 &lt;a href="http://fichiers.partage.free.fr/files/tp-banque-corrige.zip"&gt;ici&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-3684699174344458461?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/3684699174344458461/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=3684699174344458461' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/3684699174344458461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/3684699174344458461'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/tp-application-bancaire-simplifie.html' title='TP: Application bancaire simplifiée'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-6362332379307893103</id><published>2007-11-06T02:27:00.000-08:00</published><updated>2007-11-30T05:17:47.155-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MyFaces'/><category scheme='http://www.blogger.com/atom/ns#' term='jee 2007-2008'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Myfaces et JBoss 4.2</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Pour utiliser l'implémentation Apache MyFaces avec JBoss 4.2 et Redhat Developer Studio, il est nécessaire d'effectuer les opérations suivantes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Créer un nouveau projet jsf&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IoKMiXD0QB4/RzBDXDvhNPI/AAAAAAAAACM/zHiUSbLtm6k/s1600-h/tp-myfaces_html_3e1a4d83.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_IoKMiXD0QB4/RzBDXDvhNPI/AAAAAAAAACM/zHiUSbLtm6k/s400/tp-myfaces_html_3e1a4d83.gif" alt="" id="BLOGGER_PHOTO_ID_5129674038995662066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;choisir MyFaces 1.1.4&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IoKMiXD0QB4/RzBD0zvhNQI/AAAAAAAAACU/iuNYgmGeO7o/s1600-h/tp-myfaces_html_15a90217.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_IoKMiXD0QB4/RzBD0zvhNQI/AAAAAAAAACU/iuNYgmGeO7o/s400/tp-myfaces_html_15a90217.gif" alt="" id="BLOGGER_PHOTO_ID_5129674550096770306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tester: Run as/Run on server ...&lt;br /&gt;&lt;br /&gt;On obtient l'erreur suivante car il y a un conflit entre l'implémentation MyFaces déployée avec la webapp et l'implémentation de référence fournie avec JBoss.&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;10:04:44,796 ERROR [[/myfaces-examples]] Erreur lors de la configuration de la classe d'écoute de l'application (application listener) org.apache.myfaces.webapp.StartupServletContextListener&lt;br /&gt;java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Solution&lt;/span&gt;: Supprimer l'implémentation JSF-RI de JBoss&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stopper le serveur JBoss&lt;/li&gt;&lt;li&gt;Supprimer les bibliothèques jsf livrées avec Jboss&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;ici: [jboss server dir]&lt;span style="font-family:arial;"&gt;\server\default\deploy\jboss-web.deployer\jsf-libs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mettre hors service les listeners jsf dans web.xml&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;ici: [jboss server dir]\server\default\deploy\jboss-web.deployer\conf\web.xml&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt;&lt;!--    &lt;listener&gt;&lt;br /&gt;     &lt;listener-class&gt;org.jboss.web.jsf.integration.config.JBossJSFConfigureListener&lt;/listener-class&gt;&lt;br /&gt;   &lt;/listener&gt;&lt;br /&gt;&lt;br /&gt;   &lt;listener&gt;&lt;br /&gt;     &lt;listener-class&gt;com.sun.faces.application.WebappLifecycleListener&lt;/listener-class&gt;&lt;br /&gt;   &lt;/listener&gt;&lt;br /&gt;--&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ainsi que le paramètre suivant:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt;&lt;!-- &lt;init-param&gt;&lt;br /&gt;           &lt;description&gt;JSF standard tlds&lt;/description&gt;&lt;br /&gt;           &lt;param-name&gt;tagLibJar0&lt;/param-name&gt;&lt;br /&gt;           &lt;param-value&gt;jsf-libs/jsf-impl.jar&lt;/param-value&gt;&lt;br /&gt;&lt;/init-param&gt;&lt;br /&gt;--&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Redémarrer le serveur Jboss, vérifier que le serveur démarre sans exception et qu'il n'y ait pas d'erreur au déploiement de la webapp.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-6362332379307893103?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/6362332379307893103/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=6362332379307893103' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/6362332379307893103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/6362332379307893103'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/myfaces-et-jboss-42.html' title='Myfaces et JBoss 4.2'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_IoKMiXD0QB4/RzBDXDvhNPI/AAAAAAAAACM/zHiUSbLtm6k/s72-c/tp-myfaces_html_3e1a4d83.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-5391023966797021895</id><published>2007-11-05T04:53:00.000-08:00</published><updated>2007-11-30T05:18:42.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MyFaces'/><category scheme='http://www.blogger.com/atom/ns#' term='jee 2007-2008'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Installer les exemples MyFaces</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Les exemples de l'implémentation MyFaces subissent quelques modifications pour s'exécuter avec JBoss 4.2 et Eclipse.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le site des exemples MyFaces original est &lt;a href="http://example.irian.at/example-simple-20071106/home.jsf"&gt;ici.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un projet MyFaces-examples modifié se trouve &lt;a href="http://fichiers.partage.free.fr/files/my-myfaces-examples.zip"&gt;ici&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Créer un projet MyFaces comme il est décrit &lt;a href="http://fpfister.blogspot.com/2007/11/myfaces-et-jboss-42.html"&gt;ici&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Copier le répertoire WebContent et JavaSource du projet &lt;a href="http://fichiers.partage.free.fr/files/my-myfaces-examples.zip"&gt;téléchargé&lt;/a&gt; dans ce nouveau projet créé.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modifier web.xml&lt;/span&gt; (répertoire WEB-INF) pour permettre l'affichage des codes sources, en adaptant le path (&lt;span style="font-weight: bold; font-style: italic;"&gt;init-param &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;source.dir&lt;/span&gt;)&lt;/span&gt;&lt;span class="tag"&gt;&lt;/span&gt;&lt;/span&gt; du code source du projet:&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt; &lt;servlet&gt;&lt;br /&gt;  &lt;servlet-name&gt;SourceCodeServlet&lt;/servlet-name&gt;&lt;br /&gt;  &lt;servlet-class&gt;&lt;br /&gt;   org.apache.myfaces.shared_tomahawk.util.servlet.SourceCodeServlet&lt;br /&gt;  &lt;/servlet-class&gt;&lt;br /&gt;  &lt;init-param&gt;&lt;br /&gt;   &lt;param-name&gt;source.dir&lt;/param-name&gt;&lt;br /&gt;   &lt;param-value&gt;&lt;br /&gt;    C:\workspace-rhds2\myfaces-examples\JavaSource\&lt;br /&gt;   &lt;/param-value&gt;&lt;br /&gt;  &lt;/init-param&gt;&lt;br /&gt; &lt;/servlet&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Run as / Run on server pour tester&lt;/li&gt;&lt;/ul&gt;Ajouter un exemple: ValueChangeListener et Validation.&lt;br /&gt;Comment concilier un submit destiné à rafraichir une page, sans effectuer la validation du formulaire, avec un submit destiné à appliquer la règle de gestion et de navigation de la vue?&lt;br /&gt;&lt;br /&gt;Créer un formulaire dans une jsp:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_IoKMiXD0QB4/RzEM-DvhNRI/AAAAAAAAACc/pDeh5zM90Lo/s1600-h/myflistener.GIF"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_IoKMiXD0QB4/RzEM-DvhNRI/AAAAAAAAACc/pDeh5zM90Lo/s400/myflistener.GIF" alt="" id="BLOGGER_PHOTO_ID_5129895710847743250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;code de la jsp:&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;&lt;br /&gt;&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"  pageEncoding="ISO-8859-1"%&gt;&lt;br /&gt;&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;&lt;br /&gt;&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;&lt;br /&gt;&lt;%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%&gt;&lt;br /&gt;&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%&gt;&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;br /&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;&lt;head&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;&lt;br /&gt;&lt;title&gt;ValueChangeListeners et validations&lt;/title&gt;&lt;br /&gt;&lt;/head&gt;&lt;br /&gt;&lt;body&gt;&lt;br /&gt;&lt;%@include file="inc/head.inc"%&gt;&lt;br /&gt;&lt;f:view&gt;&lt;br /&gt; &lt;h:panelgroup id="body"&gt;&lt;br /&gt;  &lt;h:outputlabel styleclass="header18" value="ValueChangeListeners et validations"&gt;&lt;/h:outputLabel&gt;&lt;br /&gt;  &lt;h:form id="f1"&gt;&lt;br /&gt;   &lt;h:panelgrid columns="3" border="1" rules="all"&gt;&lt;br /&gt;    &lt;h:panelgroup&gt;&lt;br /&gt;     &lt;h:outputlabel value="foobar" for="ip1"&gt;&lt;/h:outputLabel&gt;&lt;br /&gt;     &lt;f:verbatim&gt;, une valeur entre 5 et 10&lt;/f:verbatim&gt;&lt;br /&gt;    &lt;/h:panelGroup&gt;&lt;br /&gt;    &lt;h:inputtext value="#{selectModel.dummyValue}" id="ip1" required="true"&gt;&lt;br /&gt;     &lt;f:validatelongrange minimum="5" maximum="10"&gt;&lt;br /&gt;    &lt;/h:inputText&gt;&lt;br /&gt;    &lt;t:message id="foobarError" for="ip1" styleclass="error"&gt;&lt;br /&gt;    &lt;h:selectonemenu id="selone_menu_options" value="o2" styleclass="selectOneMenu" onchange="submit()" immediate="true" valuechangelistener="#{selectModel.menuChanged}"&gt;&lt;br /&gt;     &lt;f:selectitem itemvalue="" itemlabel="choose"&gt;&lt;br /&gt;     &lt;f:selectitems value="#{selectModel.optionItems}"&gt;&lt;br /&gt;    &lt;/h:selectOneMenu&gt;&lt;br /&gt;    &lt;h:outputtext value="#{selectModel.counter}"&gt;&lt;/h:outputText&gt;&lt;br /&gt;    &lt;h:commandbutton action="#{selectModel.confirm}" value="ok"&gt;&lt;/h:commandButton&gt;&lt;br /&gt;   &lt;/h:panelGrid&gt;&lt;br /&gt;  &lt;/h:form&gt;&lt;br /&gt;  &lt;t:messages id="messageList" styleclass="error" summaryformat="{0} dans {1}"&gt;&lt;br /&gt; &lt;/h:panelGroup&gt;&lt;br /&gt; &lt;jsp:include page="inc/mbean_source.jsp"&gt;&lt;br /&gt;&lt;/f:view&gt;&lt;br /&gt;&lt;%@include file="inc/page_footer.jsp"%&gt;&lt;br /&gt;&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;code du bean:&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;&lt;br /&gt;package org.apache.myfaces.examples.listener;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.faces.context.FacesContext;&lt;br /&gt;import javax.faces.event.ValueChangeEvent;&lt;br /&gt;import javax.faces.model.SelectItem;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author Martin Marinschek&lt;br /&gt; */&lt;br /&gt;public class SelectModel {&lt;br /&gt; private List&lt;string&gt; options;&lt;br /&gt; private List&lt;selectitem&gt; optionItems;&lt;br /&gt;&lt;br /&gt; private long dummyValue = 100;&lt;br /&gt;&lt;br /&gt; public long getDummyValue() {&lt;br /&gt;  return dummyValue;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setDummyValue(long dummyValue) {&lt;br /&gt;  this.dummyValue = dummyValue;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public List getOptions() {&lt;br /&gt;  if (options == null) {&lt;br /&gt;   initOptions();&lt;br /&gt;  }&lt;br /&gt;  return options;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setOptions(List options) {&lt;br /&gt;  this.options = options;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public List getOptionItems() {&lt;br /&gt;  if (optionItems == null) {&lt;br /&gt;   initOptions();&lt;br /&gt;  }&lt;br /&gt;  return optionItems;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; static int counter = 5;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * chaque fois on ajoute une option dans la boite&lt;br /&gt;  * &lt;br /&gt;  * @param event&lt;br /&gt;  */&lt;br /&gt; public void menuChanged(ValueChangeEvent event) {&lt;br /&gt;  options.add("o" + counter);&lt;br /&gt;  optionItems.add(new SelectItem("o" + counter, "Option " + counter));&lt;br /&gt;  counter++;&lt;br /&gt;  FacesContext.getCurrentInstance().renderResponse(); // pour&lt;br /&gt;               // court-circuiter&lt;br /&gt;               // le cycle&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int getCounter() {&lt;br /&gt;  return counter;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String confirm() {&lt;br /&gt;  System.out.println("confirmed");&lt;br /&gt;  return "ok";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void initOptions() {&lt;br /&gt;  options = new ArrayList&lt;string&gt;();&lt;br /&gt;  options.add("o1");&lt;br /&gt;  options.add("o2");&lt;br /&gt;  options.add("o3");&lt;br /&gt;  options.add("o4");&lt;br /&gt;&lt;br /&gt;  optionItems = new ArrayList&lt;selectitem&gt;();&lt;br /&gt;  optionItems.add(new SelectItem("o1", "Option 1"));&lt;br /&gt;  optionItems.add(new SelectItem("o2", "Option 2"));&lt;br /&gt;  optionItems.add(new SelectItem("o3", "Option 3"));&lt;br /&gt;  optionItems.add(new SelectItem("o4", "Option 4"));&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-5391023966797021895?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/5391023966797021895/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=5391023966797021895' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/5391023966797021895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/5391023966797021895'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/installer-les-exemples-myfaces.html' title='Installer les exemples MyFaces'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_IoKMiXD0QB4/RzEM-DvhNRI/AAAAAAAAACc/pDeh5zM90Lo/s72-c/myflistener.GIF' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-3575400001442015552</id><published>2007-11-01T15:56:00.000-07:00</published><updated>2007-11-06T08:57:00.742-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='lorem-ipsum'/><title type='text'>Lorem Ipsum</title><content type='html'>&lt;a href="http://lorem.game-on-net.com/"&gt;Lorem Ipsum&lt;/a&gt; est un générateur de textes aléatoires. Vous choisissez le nombre de paragraphes ou de mots. Vous obtenez alors un texte aléatoire que vous pourrez ensuite utiliser dans vos maquettes.&lt;br /&gt;Le texte généré est du pseudo latin et peut donner l'impression d'être du vrai texte.&lt;br /&gt;&lt;br /&gt;&lt;div class="Texte" id="TheTexte"&gt;  &lt;p align="justify"&gt;Illud tamen te esse admonitum volo, primum ut qualis es talem te esse omnes existiment ut, quantum a rerum turpitudine abes, tantum te a verborum libertate seiungas; deinde ut ea in alterum ne dicas, quae cum tibi falso responsa sint, erubescas. Quis est enim, cui via ista non pateat, qui isti aetati atque etiam isti dignitati non possit quam velit petulanter, etiamsi sine ulla suspicione, at non sine argumento male dicere? Sed istarum partium culpa est eorum, qui te agere voluerunt; laus pudoris tui, quod ea te invitum dicere videbamus, ingenii, quod ornate politeque dixisti.&lt;/p&gt;   &lt;p align="justify"&gt;Et licet quocumque oculos flexeris feminas adfatim multas spectare cirratas, quibus, si nupsissent, per aetatem ter iam nixus poterat suppetere liberorum, ad usque taedium pedibus pavimenta tergentes iactari volucriter gyris, dum exprimunt innumera simulacra, quae finxere fabulae theatrales.&lt;/p&gt;   &lt;p align="justify"&gt;Et est admodum mirum videre plebem innumeram mentibus ardore quodam infuso cum dimicationum curulium eventu pendentem. haec similiaque memorabile nihil vel serium agi Romae permittunt. ergo redeundum ad textum.&lt;/p&gt;   &lt;p align="justify"&gt;Hacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo.&lt;/p&gt;   &lt;p align="justify"&gt;Ex turba vero imae sortis et paupertinae in tabernis aliqui pernoctant vinariis, non nulli velariis umbraculorum theatralium latent, quae Campanam imitatus lasciviam Catulus in aedilitate sua suspendit omnium primus; aut pugnaciter aleis certant turpi sono fragosis naribus introrsum reducto spiritu concrepantes; aut quod est studiorum omnium maximum ab ortu lucis ad vesperam sole fatiscunt vel pluviis, per minutias aurigarum equorumque praecipua vel delicta scrutantes.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-3575400001442015552?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/3575400001442015552/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=3575400001442015552' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/3575400001442015552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/3575400001442015552'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/lorem-ipsum.html' title='Lorem Ipsum'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9134888110108394290.post-4636422220430106926</id><published>2007-10-30T06:28:00.000-07:00</published><updated>2007-11-06T08:58:04.215-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code beautifier'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='themes'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Présentation syntaxique de code</title><content type='html'>&lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;SyntaxHighlighter&lt;/a&gt; is here to help a developer/coder to post code snippets online with ease and have it look pretty. It's 100% Java Script based and it doesn't care what you have on your server.&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;/*&lt;br /&gt; * Licensed to the Apache Software Foundation (ASF) under one&lt;br /&gt; * or more contributor license agreements.  See the NOTICE file&lt;br /&gt; * distributed with this work for additional information&lt;br /&gt; * regarding copyright ownership.  The ASF licenses this file&lt;br /&gt; * to you under the Apache License, Version 2.0 (the&lt;br /&gt; * "License"); you may not use this file except in compliance&lt;br /&gt; * with the License.  You may obtain a copy of the License at&lt;br /&gt; *&lt;br /&gt; *   http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt; *&lt;br /&gt; * Unless required by applicable law or agreed to in writing,&lt;br /&gt; * software distributed under the License is distributed on an&lt;br /&gt; * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY&lt;br /&gt; * KIND, either express or implied.  See the License for the&lt;br /&gt; * specific language governing permissions and limitations&lt;br /&gt; * under the License.&lt;br /&gt; */&lt;br /&gt;package org.apache.myfaces.examples.aliasexample;&lt;br /&gt;&lt;br /&gt;import javax.faces.component.html.HtmlPanelGroup;&lt;br /&gt;import javax.faces.component.html.HtmlOutputText;&lt;br /&gt;import javax.faces.component.UIComponent;&lt;br /&gt;import javax.faces.context.FacesContext;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author Martin Marinschek (latest modification by $Author: matzew $)&lt;br /&gt; * @version $Revision: 167718 $ $Date: 2005-03-24 17:47:11 +0100 (Do, 24 Mär&lt;br /&gt; *          2005) $&lt;br /&gt; */&lt;br /&gt;public abstract class ComponentBindingHolderBase {&lt;br /&gt; protected HtmlPanelGroup _panelGroup;&lt;br /&gt;&lt;br /&gt; public HtmlPanelGroup getPanelGroup() {&lt;br /&gt;  if (_panelGroup == null) {&lt;br /&gt;   _panelGroup = (HtmlPanelGroup) createComponent(HtmlPanelGroup.COMPONENT_TYPE);&lt;br /&gt;   _panelGroup.getChildren().add(createOutputText());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return _panelGroup;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setPanelGroup(HtmlPanelGroup panelGroup) {&lt;br /&gt;  _panelGroup = panelGroup;&lt;br /&gt;  _panelGroup.getChildren().add(createOutputText());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected UIComponent createComponent(String type) {&lt;br /&gt;  return FacesContext.getCurrentInstance().getApplication()&lt;br /&gt;    .createComponent(type);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private HtmlOutputText createOutputText() {&lt;br /&gt;  HtmlOutputText text = (HtmlOutputText) createComponent(HtmlOutputText.COMPONENT_TYPE);&lt;br /&gt;  text.setValue(getText());&lt;br /&gt;  return text;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected abstract String getText();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;blabla...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9134888110108394290-4636422220430106926?l=fpfister.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpfister.blogspot.com/feeds/4636422220430106926/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9134888110108394290&amp;postID=4636422220430106926' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4636422220430106926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9134888110108394290/posts/default/4636422220430106926'/><link rel='alternate' type='text/html' href='http://fpfister.blogspot.com/2007/11/copyright-c-2007-exadel-inc.html' title='Présentation syntaxique de code'/><author><name>François Pfister</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16481737129959721649'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>