Académique Documents
Professionnel Documents
Culture Documents
Ria ZK
Ria ZK
Retour dexprience
19-juin-2008
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Mise en application et Exemples
Architecture choisie Exemple de dveloppement avec ZK fentre de login Exemple de paramtrage Exemple dintgration avec des librairies externes Problmes rencontrs
Analyse utilisation ZK
Forces Faiblesses Quand & pourquoi utiliser ZK ? Quand & pourquoi ne pas utiliser ZK ?
Conclusion Bibliographie
19-juin-2008
1/1
Besoins contraintes
Interfaces dvelopper
Complexes Dynamiques Proches dun Excel distribu Facilement utilisables par des externes via le Web Dlais de dveloppement courts (0,5homme/mois de septembre 2006 dcembre 2007)
19-juin-2008
Introduction Quid ZK ?
Dfinition par ZK
1/3
ZK is an open-source Ajax Web framework that enables rich UI for Web applications with no JavaScript and little programming
Client riche
Application excute sur le serveur Excution de scripts ct client
Limite les transactions
Intrts
viter les procdures de mises jour des clients Excution dans un navigateur ct client : tous les PCs ont un navigateur install Interfaces complexes et ractives en un minimum de temps de dveloppement Homognit des interfaces (look&feel) & comportements dans les diffrents navigateurs
Introduction Quid ZK ?
2/3
19-juin-2008
Introduction Quid ZK ?
3/3
Le ZK Client engine dtecte un vnement dclench par l'utilisateur dans le navigateur Lvnement dtect est envoy lUpdate Engine. LUpdate Engine met jour le contenu des composants correspondants si cest ncessaire Le cas chant l'Update Engine le signale l'application en invoquant le gestionnaire d'vnement Si l'application choisit de changer le contenu des composants, de supprimer, d'ajouter ou de dplacer des composants, l'Update Engine envoie le nouveau contenu modifi des composants au Client Engine Enfin, le Client Engine met jour linterface cliente dans le browser
19-juin-2008 Lou Schwartz Damien Nicolas
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Conclusion Bibliographie
19-juin-2008
Hibernate
Fichiers de mapping
1/4
19-juin-2008
2/4
10
3/4
public class LoginWindow extends Window { public void onCreate() throws InterruptedException { this.setTitle("Abilitic - Login"); this.setWidth("300px"); this.setClosable(false); Combobox comboRole = (Combobox) this.getFellow("role"); FabriqueRoleVO fabriqueVO = new FabriqueRoleVO(); List<RoleVO> rolesVO = fabriqueVO.findAll(); boolean first = false ; for (RoleVO roleVO : rolesVO) { Comboitem itemRole = new Comboitem(); itemRole.setLabel(roleVO.getLabelRole()); itemRole.setId(String.valueOf(roleVO.getId())); comboRole.appendChild(itemRole); if ( !first ) { comboRole.setValue(itemRole.getLabel()); first = true ; } }
Respect du paradigme : pas daccs direct aux objets business ni la BdD accs via VO & Factory
}
4/4
Interfaces obtenues
Mozilla Firefox
19-juin-2008
12
Exemples Paramtrage
Paramtrage simple des composants
Ajout de paramtres personnels Dans le fichier ZUL
ajouter dans la balise du composant les nouveaux paramtres et leur valeur et indiquer la classe utilise pour grer le composant Ex : <listbox id="utilisateurs" type="utilisateurs type="utilisateurs" use="lu.abilitic.gui.components.DynamicListbox"/>
1/4
Dans la classe Java tendant le composant standard Listbox grant le composant personnalis DynamicListbox
Ajouter un attribut de mme nom et de type String Ajouter les getter & setter pour cet attribut
import org.zkoss.zul.Listbox; import org.zkoss.zul.Listitem; /** */ public class DynamicListbox extends Listbox{
private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } /** type de listbox*/
}
19-juin-2008 Lou Schwartz Damien Nicolas 13
Exemples Paramtrage
Sans grer la rcupration de la valeur de lattribut (fait automatiquement par ZK) lutiliser dans le code de la classe
2/4
/**A la cration de la listbox ajoute tous les lments de la bdd comme items de la listbox en fonction du type de listbox crer et slectionne le 1ier lment (vide)*/
public void onCreate(){ //ajoute le 1ier lment vide Listitem item0 = new Listitem(); item0.setLabel(" "); this.appendChild(item0); //ajoute les lments la listbox en fonction du type de la listbox cre if (type != null){ if (type.equalsIgnoreCase("gt")){ this.initGTSelect(); } if (type.equalsIgnoreCase("utilisateurs")){ this.initUtilisateurs(); } if (type.equalsIgnoreCase("echelle")){ this.initEchellesNotationSelect(); } if (type.equalsIgnoreCase("domaine")){ this.initDomainesSelect(); } }
Classe permettant de construire une listbox dynamique en fonction du type de donnes charger de la base de donnes listbox des utilisateurs listbox des groupes de travail listbox des domaines listbox des chelles de notation
/**Ajoute les items contenant les utilisateurs de la BDD la listbox*/ public void initUtilisateurs(){ List listUsers = users.findAll();
for (int i = 0; i< listUsers.size(); i++){ Listitem itemUser = new Listitem(); String prenom = listUsers.get(i)).getPrenom(); String nom = listUsers.get(i)).getNom(); itemUser.setLabel(prenom + " " + nom);
this.appendChild(itemUtilisateurs); }
Exemples Paramtrage
Rsultats obtenus
Liste des groupes de travail
3/4
19-juin-2008
15
Exemples Paramtrage
Autres paramtrages simples
Pagination automatique pour tableau et listbox
Dans la classe Java public class SaisieDeterminantsGrid extends Grid {
public void onCreate(){
//ajout de la pagination automatique this.setMold("paging"); this.setPageSize(5);
4/4
<listitem label="3"/> <listitem label="2"/> <listitem label="1"/> <listitem label="0"/> <listitem label="-1"/>
</listbox>
16
1/6
Poi
Quand laction clic sur le bouton est dtecte
Cration dun nouveau fichier Excel
En fonction du type de fichier crer (paramtre ajout au bouton) Ajoute les donnes et fait la mise en page du fichier Excel
Le fichier est cr ct serveur On utilise le composant ZK permettant de tlcharger le fichier selon le navigateur
19-juin-2008
17
2/6
19-juin-2008
18
3/6
Clic de lutilisateur
public class CreerFichierExcelButton extends Button { /** Gre l'vnement clic sur le bouton en fonction du type de document gnrer */ public void onClick() throws IOException{ //Gnre le fichier xls if(this.getLabel().equals("Creer")){ //Rcupre les donnes en session SessionVO currentSessionVO = new SessionVO(); int typeFichier = (Integer)currentSessionVO.getAttribute( MappingAddresses.TYPE_FICHIER_A_GENERER); //cre le fichier createFile(nomFichier); //En fonction du type de fichier : cre les feuilles dans le fichier et ajoute les donnes correspondantes switch (typeFichier){ case 0 : {creerListePresence(); break;} case 1 : {creerQuestionnaire20Determinants(); break;} case 2 : {creerListeTousDeterminantsAtelier1(); break;} } //clot le fichier cr et donne l'utilisateur accs au fichier endFile(); //Ferme la fentre de cration du fichier parent.onClose(); } } /**Ferme le fichier cr et permet de le tlcharger localement**/ public void endFile() throws IOException, InterruptedException{ InputStream is = new FileInputStream(nomFichier); if (is != null){ Filedownload.save(is, "application/xls", nomFichier); } } Lou Schwartz Damien Nicolas
19-juin-2008
19
4/6
Clic de lutilisateur
19-juin-2008
20
5/6
Cre un graphique avec JFreeChart daprs les donnes en session ou dans la base de donnes Convertit le graphique obtenu en image ZK org.zkoss.image.AImage Met jour limage dans la fentre
import import import import java.awt.image.BufferedImage; org.jfree.chart.JFreeChart; org.zkoss.image.AImage; org.zkoss.zul.Window;
/** Classe permettant de grer la fentre de slection des dterminants et d'affichage du graphique*/ public class GraphiqueDependanceInfluenceWindow extends Window{ public void onCreate() throws IOException{ //Cration du graphique BufferedImage chartImarge = chart.createBufferedImage(500, 300, BufferedImage.TRANSLUCENT , null); byte[] bytes = EncoderUtil.encode(chartImarge, ImageFormat.PNG, true); AImage image = new AImage("XY Chart 2", bytes); imageOfGraph.setContent(image); //Attache l'image ZK la fentre this.appendChild(imageOfGraph); } }
19-juin-2008
21
6/6
19-juin-2008
22
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Conclusion Bibliographie
19-juin-2008
23
1/2
Ne charger que linterface et les donnes/traitements du premier onglet visible A la slection dun onglet charger les donnes et effectuer les traitements ncessaires
19-juin-2008
24
2/2
19-juin-2008
25
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Analyse utilisation ZK
Forces Faiblesses Quand & pourquoi utiliser ZK ? Quand & pourquoi ne pas utiliser ZK ?
Conclusion Bibliographie
19-juin-2008 Lou Schwartz Damien Nicolas 26
Forces ZK
Gestion des vnements simplifie par ZK
Beaucoup dvnements grs :
onCreate - onFocus - onClick - onClose - onSelect Exemple : grer un clic sur un bouton
1. tendre la classe org.zkoss.zul.Button 2. Surcharger la mthode onClick() 3. Quand vnement dtect par ZK excute la mthode onClick
1/3
Nombreux composants
89 XUL - 83 XHTML off-the-shelf components version 3.0.4 25 mars 2008
Combobox Grid Datebox (avec ouverture calendrier) Tree Listbox JFreeChart FCK Editor Audio Pie Chart Google Map Editor Dojo Fisheyes List Timeline
Forces ZK
Paramtrage simple des composants Tous serveurs de servlets priori
Tomcat Jboss
2/3
Intgration style sheets CSS Multilinguisme gr dynamiquement Structuration MVC possible pour certains composants Possibilits dassociation avec
Hibernate JSF JSP JFreeChart + toutes librairies Java externes
Ex: POI pour gnration fichier Excel
Autres langages
Ruby / Groovy / JavaScript
Lou Schwartz Damien Nicolas
19-juin-2008
28
Forces ZK
Bibliothques
Liste de .jar intgrer au projet Java
3/3
Tests
JUnit pour les composants tendus en Java Tester lactivit des servlets
zk-3.0.5 2008-04-30 zk-3.0.4 2008-03-24 zk-3.0.3 2008-02-01 zk-3.0.2 2008-01-22 zk-3.0.1 2007-12-17 zk-3.0.0 2007-11-06 zk-2.4.2 2007-12-15 zk-2.4.1 2007-07-05 zk-2.4.0 2007-06-07 zk-2.3.1 2007-05-02 zk-2.3.0 2007-03-19 zk-2.2.1 2007-01-01 zk-2.2.0 2006-12-13 zk-2.1.3 2006-10-23 zk-2.1.2 2006-10-02 zk-2.1.1 2006-09-19 zk-2.1.0 2006-08-28 zk-2.0.1 2006-06-25 zk-2.0.0 2006-06-13 zk-1.1.0 2006-03-20 zk-1.0.1 2006-03-03 zk-1.0.0 2006-02-27
29
Faiblesses ZK
Documentation
Utilisation Java ZK Javadoc lgre quasi inexistante
1/2
19-juin-2008
30
Faiblesses ZK
Code HTML gnr fentre login valide ?
W3C validator non warnings 35 erreurs 43 warnings HTML validator / Firefox
2/2
assez lourd
Outil de dveloppement interface de cration graphique (authoring) pour les interfaces en ZUML
ZeroKode designer Dvelopp avec ZK version 2.1.0 RC2 Test ne fonctionne pas
D probablement la version ZK utilise Plus de posts sur le forum depuis octobre 2007 Semble en cours dabandon
19-juin-2008
31
1/1
Gestion des traitements et vnements en Java Utilisation la place de Swing par exemple
19-juin-2008
32
19-juin-2008
33
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Analyse utilisation ZK
Forces Faiblesses Quand & pourquoi utiliser ZK ? Quand & pourquoi ne pas utiliser ZK ?
Conclusion
Bibliographie
19-juin-2008
34
Conclusion
ZK
Trs mallable Extension simple Seul pr-requis : Java A tester :
version ZK pour mobiles
The finalist of "Best Tool and Utility for Developers," "Best User Support" and "Best Technical Design"!!!
19-juin-2008
35
Plan de la prsentation
Introduction
Contexte Quid ZK ?
Analyse utilisation ZK
Forces Faiblesses Quand & pourquoi utiliser ZK ? Quand & pourquoi ne pas utiliser ZK ?
Conclusion
Bibliographie
19-juin-2008
36
Bibliographique
Site officiel ZK
http://www.zkoss.org
Guide du dveloppeur ZK
http://www.zkoss.org/doc/devguide/
Dmonstration interactive de ZK
http://www.zkoss.org/zkdemo/userguide/
19-juin-2008
37
Questions ?
19-juin-2008 30-sept-06
38