r71 - in trunk: bonzoms-ui/src src/site src/site/resources src/site/resources/css src/site/resources/schemas src/site/rst src/site/rst/developper
Author: jcouteau Date: 2009-09-25 11:06:12 +0200 (Fri, 25 Sep 2009) New Revision: 71 Added: trunk/src/site/resources/ trunk/src/site/resources/css/ trunk/src/site/resources/css/site.css trunk/src/site/resources/schemas/ trunk/src/site/resources/schemas/getActiveBlock_error.png trunk/src/site/resources/schemas/layout_warnings.png trunk/src/site/resources/schemas/partyView_classes.png trunk/src/site/resources/schemas/snapshot_blockManager_hide.png trunk/src/site/resources/schemas/snapshot_blockManager_show.png trunk/src/site/resources/schemas/snapshot_contactComponent_edit_address.png trunk/src/site/rst/developper/ trunk/src/site/rst/developper/composants.rst trunk/src/site/rst/developper/how-to.rst trunk/src/site/rst/developper/layout_erreurs.rst trunk/src/site/rst/developper/services.rst trunk/src/site/rst/developper/todo.rst trunk/src/site/rst/index.rst Removed: trunk/bonzoms-ui/src/site/ Modified: trunk/src/site/site.xml Log: Put maven site on root. Add download links and trackers Copied: trunk/src/site/resources/css/site.css (from rev 70, trunk/bonzoms-ui/src/site/resources/css/site.css) =================================================================== --- trunk/src/site/resources/css/site.css (rev 0) +++ trunk/src/site/resources/css/site.css 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,7 @@ +pre.literal_block { + border: 2px groove #FF4940; + background-color: #FFF1E1; + padding: 11px 11px 0; + font-family: monospace; + color: #58140B; +} \ No newline at end of file Copied: trunk/src/site/resources/schemas/getActiveBlock_error.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/getActiveBlock_error.png) =================================================================== (Binary files differ) Copied: trunk/src/site/resources/schemas/layout_warnings.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/layout_warnings.png) =================================================================== (Binary files differ) Copied: trunk/src/site/resources/schemas/partyView_classes.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/partyView_classes.png) =================================================================== (Binary files differ) Copied: trunk/src/site/resources/schemas/snapshot_blockManager_hide.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/snapshot_blockManager_hide.png) =================================================================== (Binary files differ) Copied: trunk/src/site/resources/schemas/snapshot_blockManager_show.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/snapshot_blockManager_show.png) =================================================================== (Binary files differ) Copied: trunk/src/site/resources/schemas/snapshot_contactComponent_edit_address.png (from rev 70, trunk/bonzoms-ui/src/site/resources/schemas/snapshot_contactComponent_edit_address.png) =================================================================== (Binary files differ) Copied: trunk/src/site/rst/developper/composants.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/developper/composants.rst) =================================================================== --- trunk/src/site/rst/developper/composants.rst (rev 0) +++ trunk/src/site/rst/developper/composants.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,125 @@ +Composants Tapestry de Bonzoms +============================== + +:Author: $Author$ +:Version: 1.0 +:Revision: $Revision$ +:Date: $Date$ + +*Created by fdesbois on 2009-07-15* + +Plusieurs pages nécessitent l'affichage de données communes -> création de composants Tapestry : + +- ContactComponent : Gestion des contacts pour un tiers (party), que ce soit un groupe de personne, un service, une société, une personne, ... +- RoleComponent : Gestion des rôles pour un tiers +- RelationComponent : Gestion des relations pour un tiers + +D'autres composants graphiques ont été créé pour simplifier l'affichage des données : + +- BlockManager : Gestion d'un block considéré comme autonome, gestion du show/hide via JavaScript +- WindowLink : Lien permettant l'ouverture d'une fenêtre en Prototype + +ContactComponent +---------------- + +Ce composant a été le premier implémenté ce qui explique son fonctionnement différent des deux autres (RoleComponent et RelationComponent). +Il manipule une liste de contacts pour un tiers donné. Cette liste est persistante pour Tapestry (utilisation du @Persist) mais n'est pas sauvegardé en base. +La liste (composant `Grid`_ de Tapestry) est éditable : + +- Ajout d'un nouveau contact via un lien au dessus de la liste (différentes icones suivant le type de contact). +- Modification d'un contact existant via une icone au niveau de la ligne du contact (colonne "actions"). + +Un attribut "editable" présent dans l'objet **Contact** permet de connaître l'état du contact qui déterminera l'affichage d'un champs d'édition. +Le type de contact "Address" est différent des autres, il possède plusieurs champs d'édition (complement d'adresse, ville, code postal, pays) dont certains possèdent +un Autocomplete (ville et pays). Le mixin `OnEvent`_ de ChenilleKit est utilisé ici pour la sauvegarde des données en session à chaque changement d'édition (OnBlur ou OnChange). +Ce mixin a été intégré et modifié pour Bonzoms afin de permettre le passage de paramètres en context. + +Les éléments de la liste peuvent donc être ajoutés, modifiés et supprimés sans affecter la base de données. La sauvegarde des données doit se faire dans la page qui inclut +le composant ContactComponent. + +.. image:: ../schemas/snapshot_contactComponent_edit_address.png + :alt: Affichage d'une personne avec gestion des contacts (ContactComponent) + :align: center + +*Affichage d'une personne avec gestion des contacts (ContactComponent)* + +.. _Grid: http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry... + +.. _OnEvent: http://www.chenillekit.org/chenillekit-tapestry/ref/org/chenillekit/tapestry... + +Utilisation +~~~~~~~~~~~ + +ContactComponent est utilisé sur deux pages distinctes : + +- PersonView : affichage d'une personne +- OrganizationView : affichage d'une société + +Le comportement du ContactComponent est commun à ces deux pages. L'implémentation de la gestion des sauvegardes (ajout/modification/suppression) est donc faites +dans la partie commune à ces deux pages : dans la classe abstraite AbstractPartyView dont héritent PersonView et OrganizationView. + +Contrairement aux composants décrits ci-dessous, la gestion du ContactComponent se fait au niveau de la page qui l'utilise. + +RoleComponent +------------- + +Ce composant permet la gestion des rôles : Ajout, modification et suppression d'un rôle pour un tiers donné. Afin de le rendre autonome, il inclut son père sous la forme d'une interface +et via l'annotation @InjectContainer. L'interface utilisé est PartyView qui fournit trois méthodes : + +- getParty() : sélection du tiers +- getPartyId() : sélection de l'identifiant du tiers +- getPartys() : sélection de l'ensemble des tiers + +Chaque page utilisant le RoleComponent doit implémenter l'interface PartyView. De ce fait le RoleComponent est dépendant d'un tiers donné pour le chargement de ses données. +Deux classes implémentent actuellement cette interface : + +- AbstractPartyView : partie commune aux pages PersonView et OrganizationView +- RolesAndRelations : utilisation d'une liste déroulante pour la sélection d'un tiers, en découle la gestion de ses rôles et relations. + +RoleComponent intègre le composant Warnings pour sa gestion propre des erreurs, d'où l'implémentation de DataLoador (voir `Gestion des erreurs`_ ). + +.. image:: ../schemas/partyView_classes.png + :alt: Diagramme d'implémentation des pages PersonView et OrganizationView avec utilisation du RoleComponent + :align: center + +*Diagramme d'implémentation des pages PersonView et OrganizationView avec utilisation du RoleComponent* + +.. _Gestion des erreurs: layout_erreurs.html + +Utilisation +~~~~~~~~~~~ + +La page doit implémenter PartyView et doit intégrer à son tml : <t:rolecomponent /> + +RelationComponent +----------------- + +Ce composant permet la gestion des relations pour un tiers : Ajout, modification et suppression. Son comportement est similaire au RoleComponent. + +Utilisation +~~~~~~~~~~~ + +La page doit implémenter PartyView et doit intégrer à son tml : <t:relationcomponent /> + +BlockManager +------------ + +Il s'agit simplement d'un composant graphique permettant l'affichage dans un bloc d'une partie de la page. Ce bloc peut être caché ou montré. L'état +du bloc est sauvé en session. Il est utilisé pour tous les composants de gestion sur une page (gestion des contact, des services, des employés, des rôles, ...) + +.. image:: ../schemas/snapshot_blockManager_show.png + :alt: BlockManager show + :align: center + +*BlockManager en mode "show"* + +.. image:: ../schemas/snapshot_blockManager_hide.png + :alt: BlockManager hide + :align: center + +*BlockManager en mode "hide"* + +WindowLink +---------- + +Work in progress... \ No newline at end of file Copied: trunk/src/site/rst/developper/how-to.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/developper/how-to.rst) =================================================================== --- trunk/src/site/rst/developper/how-to.rst (rev 0) +++ trunk/src/site/rst/developper/how-to.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,177 @@ +Bonnes pratiques avec Tapestry +============================== + +:Author: $Author$ +:Version: 1.0 +:Revision: $Revision$ +:Date: $Date$ + +*Created by fdesbois on 2009-07-16* + +Tapestry est un framework web en Java basé uniquement sur les conventions de nommage. Aucun XML n'est obligatoire pour la configuration des pages. A chaque page +est lié deux fichiers : + +- fichier template (.tml) : Vue de la page en xhtml + namespace tapestry +- fichier java : Contrôleur de la page avec gestion des évènements (EventHandler) et des propriétés (attributs dynamiques de la page) + +Tapestry est assez complexe à prendre en main, ce document vous servira à mieux appréhender les différentes techniques pour le chargement des données depuis les services +de Bonzoms-business. + +Evènementiel +------------ + +Plusieurs évènements sont lancés au chargement d'une page Tapestry (voir `Cycle de vie`_ ) : + +- Rendu de la page : Trois évènements concernent le rendu de la page (setupRender, beginRender et afterRender) +- Activation / Passivation : Deux évènements lancés à chaque action de la page (ainsi que l'ouverture) + +Tapestry ne garde pas les données en mémoire une fois la page exécutée. Chaque nouvel évènement lancé pourra potentiellement envoyé une exception si une propriété +nécessaire à l'affichage est null. Il existe plusieurs solutions pour pallier au problème de null sur les propriétés (plus ou moins bonnes). De nombreux évènements +peuvent causer ce problème, que ce soit des liens (actionlink ou eventlink), des soumissions de formulaire ou des évènements propres. + +.. _Cycle de vie: http://tapestry.apache.org/tapestry5.1/guide/lifecycle.html + +La question se pose : **Où charger les données depuis mes services (Bonzoms-business) et comment ne pas les perdre à chaque évènement ?** + +L'annotation @Persist +~~~~~~~~~~~~~~~~~~~~~ + +Cette annotation permet à un attribut de le rendre persistant en session (session navigateur web). Cependant, tout mettre en session pour ne pas perdre les données +(et ne pas les recharger), peut provoquer des problèmes de rafraichissement (un nouvel ajout non pris en compte, etc...). De plus, les sessions peuvent coûter en mémoire +côté client. Il ne faut abuser des @Persist !! + +Activate/Passivate +~~~~~~~~~~~~~~~~~~ + +Evènements très intéressants (et indispensables) qui permettent l'utilisation de paramètre (contexte) d'une page à une autre (Notamment via les liens `pagelink`_ avec +utilisation du paramètre "context"). Le Activate est un évènement qui est lancé très souvent sur la page (changement de fenêtre, click sur un lien avec javascript, formualaire, ...). +Il est donc important de ne surtout pas charger les données dans le onActivate. Cette méthode sert uniquement à garder le contexte de la page courante (un identifiant dans +la plupart des cas). + +Attention + Il ne faut pas créé plusieurs méthodes onActivate suivant le nombre de paramètres (comme il serait tentant de le faire en Java) car dans la majorité des cas, toutes + les méthodes onActivate seront exécutées ! Pour pallier au problème, il faut utiliser EventContext. + +.. _pagelink: http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry... + +Exemple:: + + private String monId; // identifiant de l'objet à afficher sur la page + + void onActivate(EventContext ec) { + monId = ec.get(String.class, 0); // Utilisation du EventContext, récupération du premier paramètre + } + + String onPassivate() { // ici on souhaite uniquement gardé un seul paramètre, l'identifiant + // (utilisation du EventContext non testé) + return monId; + } + +setupRender +~~~~~~~~~~~ + +Le setupRender est exécuté une seule fois au chargement de la page, il serait donc intéressant de l'utiliser pour le chargement des données ! Cependant, les évènements +liés au JavaScript sur la page peuvent nécessiter des propriétés de la page devenues null à la fin du chargement. Pour pallier au problème, il est possible d'utiliser +le @Persist, et donc de rendre null tous les attributs à charger dans le setupRender. Ainsi les données sont chargées une seule fois et le setupRender sera réexécuté dès le +rafraichissement (ou changement) de la page. + +Exemple:: + + @Inject + private MyService monService; + + @Persist + private List<String> maListe; + + void setupRender() { + maListe = null; + maListe = monService.getListProps(); + } + +Getter +~~~~~~ + +Tapestry oblige les propriétés d'une page à être "privé" et posséder des accesseurs (getter/setter). Il est possible d'utiliser l'annotation @Property pour ne pas avoir +à écrire les méthodes get et set de chaque propriété. Mais ne serait-il pas judicieux d'effectuer le chargement de chaque donnée au moment où Tapestry en a besoin ? +Ainsi le problème de null ne se posera plus, car le chargement se fera à ce moment là ! + +Exemple:: + + @Inject + private MyService monService; + + private List<String> maListe; + + public List<String> getMaListe() { // convention de nommage du getter + if (maListe == null) { + maListe = monService.getListProps(); + } + return maListe; + } + +Résumé +~~~~~~ + +L'utilisation des getter semble la meilleure solution pour pallier au problème des propriétés null pouvant engendrées des erreurs sur la page. Quel que soit l'évènement, +si Tapestry a besoin de connaître une propriété, il utilisera son getter et le chargement sera fait si l'attribut est null. Pour les données volumineuses, le @Persist +peut éviter de nombreuses requêtes inutiles à la base de données. Dans ce cas il est judicieux d'utiliser le setupRender ET les getter. + +Exemple:: + + @Inject + private MyService monService; + + @Persist + private List<String> maListe; + + void setupRender() { + maListe = null; + getMaListe(); // chargement unique (méthode getMaListe identique au paragraphe précédent) + } + + +DataLoador +---------- + +Une autre problématique concerne la gestion des messages d'erreurs qui peuvent survenir lors de l'utilisation des services. Comme vu dans `Gestion des erreurs`_ , +un composant Warnings (ou directement le Layout) permettent l'affichage des erreurs. Les pages doivent cependant implémenter l'interface DataLoador. Cette interface +est simple et ne possède qu'une seule méthode : loadData(). Cette méthode est exécuté au moment du rendu de la page (équivalent au setupRender) mais dans le composant +Warnings qui s'occupent des messages d'erreurs. Cette méthode permet de charger toutes les données qui engendrent potentiellement des erreurs, avant l'affichage de la page. +Pour simplifier, la méthode loadData() remplace tout simplement le setupRender(). Les données seront chargées via le loadData() de la même manière que le setupRender() +expliquer précédemment. + +.. _Gestion des erreurs: layout_erreurs.html + +Exemple:: + + public MyPage implements DataLoador { + ... + @Inject + private MyService monService; + + @InjectComponent + private Layout layout; + + @Persist + private List<String> maListe; + + void loadData() { + maListe = null; + getMaListe(); // chargement unique + } + + public List<String> getMaListe() { + if (maListe == null) { + try { + maListe = monService.getListProps(); + } catch (Exception eee) { + // utilisation de la gestion d'erreurs du layout + layout.addError("Une erreur est survenue, impossible de charger maListe"); + } + } + return maListe; + } + ... + } + + Copied: trunk/src/site/rst/developper/layout_erreurs.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/developper/layout_erreurs.rst) =================================================================== --- trunk/src/site/rst/developper/layout_erreurs.rst (rev 0) +++ trunk/src/site/rst/developper/layout_erreurs.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,123 @@ +Layout et Gestion des erreurs +============================= + +:Author: $Author$ +:Version: 1.0 +:Revision: $Revision$ +:Date: $Date$ + +*Created by fdesbois on 2009-07-15* + +Layout +------ + +Le Layout de Bonzoms est un composant Tapestry. Il permet de définir le contour du site comprenant le menu et la barre des langues pour la gestion de l'internationalisation. +Ce composant est appelé sur toutes les pages (package org.chorem.bonzoms.ui.pages):: + + <t:layout t:ident="${div-id}" t:pageTitle="${title}" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter"> + // contenu tml de la page + </t:layout> + +Cette balise entoure chacun des .tml des pages présents dans le dossier webapp. Deux paramètres sont fournis pour préciser des informations sur la page qui seront +inclus directement dans le layout : + +- pageTitle : titre de la page (placé dans la balise <title> du header du layout). +- ident : identifiant pour la balise <div> englobant la page, utilisé pour le CSS. + +Le layout gère également la gestion i18n via le service PersistentLocale de Tapestry. Les Locales des langues doivent être déclaré dans le AppModule :: + + public static void contributeApplicationDefaults( + MappedConfiguration < String, String > configuration) { + + ... + + configuration.add(SymbolConstants.SUPPORTED_LOCALES, "fr,en"); + ... + } + +Gestion des erreurs +------------------- + +Les erreurs survenues pendant l'affichage d'une page (notamment lors de la manipulation des méthodes des services de Bonzoms-business) peuvent être gérées par +le layout qui se chargera de les afficher. Un composant a été spécialement créé pour cela, le composant Warnings qui gère l'affichage du bloc de messages. +Une classe abstraite AbstractErrorManager permet de manipuler ces messages et de distinguer ceux qui sont des erreurs et ceux qui sont simplement des warnings. +Le composant Warnings ainsi que le Layout héritent tous les deux de cette classe pour permettre aux pages comme aux composants de gérer les erreurs. + +.. image:: ../schemas/layout_warnings.png + :alt: Diagramme d'implémentation du Layout et de la gestion des erreurs + :align: center + +*Diagramme d'implémentation du Layout et de la gestion des erreurs* + +Composant Warnings +~~~~~~~~~~~~~~~~~~ + +L'affichage du composant détermine également l'affichage de son contenu. Généralement le contenu est soit celui d'une page, soit un composant nécessitant un affichage +des erreurs/warnings. Le composant `delegate`_ de Tapestry permet d'afficher la page de trois manières différentes : + +- Existence d'erreurs : Affichage uniquement du bloc de messages d'erreurs +- Existence de warnings sans erreurs : Affichage du bloc de messages des warnings + contenu (t:body) +- Ni warnings, ni erreurs : Affichage du contenu + +.. _delegate: http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry... + +Cas d'une page +~~~~~~~~~~~~~~ + +Comme dit précédemment, chaque page contient le layout (via l'annotation @InjectComponent), et peut donc utiliser les méthodes pour la gestion des erreurs +comme addError, hasErrors, addWarnings, ... +Les erreurs doivent être fournies au Layout avant le rendu de la page, sinon le delegate du composant Warnings s'affichera sans connaître les futures erreurs. +Pour ce faire, l'interface DataLoador est utilisée. Cette interface possède une seule méthode : loadData(). Elle est executée juste avant l'affichage +du delegate du composant Warnings. Ainsi la page concerné implémentera la méthode loadData() qui contiendra ses méthodes nécessitant un affichage des erreurs. +Voir rubrique `Bonnes pratiques`_ pour plus de détails sur l'intérêt du loadData. +En fait le Layout se charge de transférer les erreurs directement au composant Warnings. La page ne se préocuppe pas de l'affichage des messages, le Layout est +là pour ca. + +.. _Bonnes pratiques: how-to.html + +Cas d'un composant +~~~~~~~~~~~~~~~~~~ + +Les composants peuvent également avoir leur propre affichage des erreurs. En effet, ils ne contiennent pas le Layout mais peuvent contenir directement le composant +Warnings qui sera utilisé pour le remplissage des messages d'erreurs/warnings. Sur le même principe qu'une page, le composant concerné devra implémenté l'interface +DataLoador et sa méthode loadData(). Contrairement au cas d'une page, le composant devra explicitement inséré le composant Warnings dans son .tml:: + + <t:warnings> + //contenu tml du composant + </t:warnings> + +Exemple +~~~~~~~ + +La page RolesAndRelations nécessite le chargement d'une liste des tiers (partys) existants. Cette liste sera affichée dans un composant select et ne nécessitera +pas de modifications lors de la navigation sur la page. La méthode getPartys() permet ce chargement. Cette méthode appel le service de Bonzoms-business pour récupérer +l'ensemble des tiers existants en base. Ainsi une BonzomsException peut survenir et un message d'erreur doit être donné au client. + +Trace d'execution : + +- Warnings : Affichage du contenu de la page en passant par le delegate : getActiveBlock() +- Layout : Le composant Warnings est inclut dans le Layout. Warnings connait son parent via l'annotation @InjectContainer. Ce parent doit implémenté la méthode + loadData() de l'interface DataLoador, ce qui est le cas du Layout : container.loadData() +- Layout : Le Layout, sur le même principe que le composant Warnings, connait son parent qui implémente également DataLoador (ceci implique que toutes pages doivent obligatoirement + implémenter DataLoador sinon elles ne pourront pas utiliser le Layout). Le Layout appele également container.loadData() +- RolesAndRelations : La méthode loadData est appelé, chargement des données : getPartys() +- RolesAndRelations : La méthode getPartys fait appel au service de Bonzoms-business et récupère l'exception BonzomsException si une erreur est survenue. Dans ce cas + une erreur est ajouté via la méthode layout.addError(...). +- Layout : Transfert des erreurs au composant Warnings : warnings.initComponent(errors, warnings) +- Warnings : Retour à la méthode getActiveBlock qui détecte une erreur ou non et affiche le contenu de la page en conséquence. + +.. image:: ../schemas/getActiveBlock_error.png + :alt: Séquence cas d'utilisation : Affichage page RolesAndRelations avec erreur lors du chargement des tiers + :align: center + +*Séquence cas d'utilisation : Affichage page RolesAndRelations avec erreur lors du chargement des tiers* + +Erreur lors d'une action +~~~~~~~~~~~~~~~~~~~~~~~~ + +Il est possible qu'une erreur survienne au moment d'une action sur la page, généralement lors d'un appel à un service de Bonzoms-business. L'affichage de cette erreur +peut être afficher simplement en rafraichissant la zone autour du delegate du composant Warnings. Le actionlink qui déclenche l'action doit être lié à cette zone : +<t:actionlink ... t:zone="**showWarnings**" >... Le EventHandler qui reçoit l'évènement sur le actionlink retournera le block que lui fournira le Layout (layout.getBody()) pour le cas +d'une page ou directement la zone depuis le composant Warnings (warnings.getZone()). Voir la documentation Tapestry pour l'utilisation des `Zone`_. + +.. _Zone: http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry... \ No newline at end of file Copied: trunk/src/site/rst/developper/services.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/developper/services.rst) =================================================================== --- trunk/src/site/rst/developper/services.rst (rev 0) +++ trunk/src/site/rst/developper/services.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,44 @@ +Services +======== + +:Author: $Author$ +:Version: 1.0 +:Revision: $Revision$ +:Date: $Date$ + +*Created by fdesbois on 2009-07-16* + +Le AppModule de `Tapestry-IoC`_ permet de simplement lié les services de Bonzoms-business au registre de Tapestry. La méthode build de la classe AppModule permet +de "binder" les interfaces des services avec leurs implémentations. Tapestry se chargera d'instancier les services au moment où ceux ci sont utilisés. + +.. _Tapestry-IoC: http://tapestry.apache.org/tapestry5.1/tapestry-ioc/ + +AppModule +--------- + +:: + + public static void bind(ServiceBinder binder) { + // nécessite un identifiant à cause de l'héritage entre les services (ServicePerson extends ServiceParty, etc...) + binder.bind(ServiceParty.class, ServicePartyImpl.class).withId("serviceParty"); + binder.bind(ServicePerson.class, ServicePersonImpl.class); + binder.bind(ServiceContact.class, ServiceContactImpl.class); + ... + } + +Injection de service +-------------------- + +:: + + public class MyPage { + + @Inject + private ServicePerson servicePerson; + + @InjectService("serviceParty") + private ServiceParty serviceParty; + + ... + } + Copied: trunk/src/site/rst/developper/todo.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/developper/todo.rst) =================================================================== --- trunk/src/site/rst/developper/todo.rst (rev 0) +++ trunk/src/site/rst/developper/todo.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,18 @@ +Todo +==== + +:Author: $Author$ +:Version: 1.0 +:Revision: $Revision$ +:Date: $Date$ + +*Created by fdesbois on 2009-07-20* + +Certaines fonctionnalités intéressantes non pas été implémentées : + +- Gestion des types de tiers (party) : Création d'une nouvelle page ? +- Plus d'options pour la création d'une société (raison sociale, ...) : voir avec Bonzoms-business +- Moteur de recherche sur annuaire : Nouvelle page avec filtres sur l'ensemble des contacts (gestion des contacts liés aux relations, ...) +- Compatibilité avec LDAP (voir avec Bonzoms-business) +- Gestion client/fournisseur plus précise (CRM/SRM) : nouvelles pages + Copied: trunk/src/site/rst/index.rst (from rev 70, trunk/bonzoms-ui/src/site/rst/index.rst) =================================================================== --- trunk/src/site/rst/index.rst (rev 0) +++ trunk/src/site/rst/index.rst 2009-09-25 09:06:12 UTC (rev 71) @@ -0,0 +1,26 @@ +Bonzoms Web Interface +===================== + +Ce module correspond à l'interface utilisateur de l'application Bonzoms. Cette interface a été réalisé grâce au framework Apache Tapestry. Il s'agit d'une interface +web basé sur une architecture à base de composants. Aucune configuration XML n'est nécessaire. Il est primordial de bien connaître Tapestry pour pouvoir développer +sur ce module. + +Vous trouverez sur les pages de ce module : + +* Documentation utilisateur + + - Introduction au guide utilisateur + - Gestion des personnes : ajout/modification/suppression + - Gestion des sociétés : ajout/modification/suppression, gestion des services, gestion des employés + - Gestion des contacts : pour une personne ou une société + - Gestion des rôles et relations : pour une personne, une société ou un autre tiers (service, association, client, ...) + +* Documentation développeur + + - Layout et Gestion des erreurs : utilisation des composants Layout et Warnings + - Composants pour Tapestry : composants liés à l'application (ContactComponent, RoleComponent, RelationComponent) ou composants graphiques (BlockManager, WindowLink) + - Bonnes pratiques avec Tapestry : comment Tapestry est utilisé pour le rendu des données depuis Bonzoms-business et évènementiel en Tapestry + - Todo : fonctionnalités intéressantes non implémentées + - Services : utilisation des services de Bonzoms-business via le AppModule de Tapestry (voir `Tapestry-IoC`_ ) + +.. _Tapestry-IoC: http://tapestry.apache.org/tapestry5.1/tapestry-ioc/module.html \ No newline at end of file Modified: trunk/src/site/site.xml =================================================================== --- trunk/src/site/site.xml 2009-09-24 14:32:50 UTC (rev 70) +++ trunk/src/site/site.xml 2009-09-25 09:06:12 UTC (rev 71) @@ -1,34 +1,50 @@ <?xml version="1.0" encoding="UTF-8"?> -<project name="Bonzoms"> +<project name="Bonzoms-ui"> + <publishDate format="dd/MM/yyyy"/> + <bannerLeft> <name>${project.name}</name> - <href>index.html</href> </bannerLeft> - <poweredBy> - <logo href="http://maven.apache.org" name="Maven" img="${project.url}/images/logos/maven-feather.png"/> - <logo href="http://www.nuiton.org/projects/show/jrst" name="JRst" img="${project.url}/images/jrst-logo.png"/> - <logo href="http://docutils.sourceforge.net/rst.html" name="ReStructuredText" img="${project.url}/images/restructuredtext-logo.png"/> - </poweredBy> - <body> - <breadcrumbs> - <item name="${project.name}" href="${project.url}" /> - </breadcrumbs> - + <!--menu name="Utilisateur" inherit="top" > + <item name="Introduction" href="user/introduction.html" /> + <item name="Personnes" href="user/person.html" /> + <item name="Sociétés" href="user/company.html" /> + <item name="Contacts" href="user/contacts.html" /> + <item name="Roles et relations" href="user/roles_relations.html" /> + </menu--> + + <menu name="Développeur"> + <item name="Layout et Gestion des erreurs" href="developper/layout_erreurs.html"/> + <item name="Composants Tapestry" href="developper/composants.html"/> + <item name="Bonne pratiques pour Tapestry" href="developper/how-to.html"/> + <item name="Services" href="developper/services.html"/> + <item name="Todo" href="developper/todo.html"/> + </menu> + <menu name="Downloads"> - <item name="Stable" href="http://maven.chorem.org/release/org/chorem/bonzoms"/> - <item name="Snapshot" href="http://maven.chorem.org/snapshot/org/chorem/bonzoms"/> + <item name="Downloads" href="http://chorem.org/projects/list_files/bonzoms"/> </menu> + <menu name="Trackers"> - <item name="Bugs" href="http://chorem.org/projects/bonzoms/issues?query_id=1"/> - <item name="Améliorations" href="http://chorem.org/projects/bonzoms/issues?query_id=2"/> - <item name="Aide" href="http://chorem.org/projects/bonzoms/issues?query_id=3"/> + <item name="Bugs" href="${project.issueManagement.url}?query_id=1"/> + <item name="Améliorations" href="${project.issueManagement.url}?query_id=2"/> + <item name="Aide" href="${project.issueManagement.url}?query_id=3"/> </menu> + <menu name="Liens"> + <item name="Tapestry" href="http://tapestry.apache.org/tapestry5.1/" title="Site officiel de Tapestry" /> + <item name="Prototype" href="http://www.prototypejs.org/" title="Librarie JavaScript Prototype incluse dans Tapestry" /> + <item name="ChenilleKit" href="http://www.chenillekit.org/chenillekit-tapestry/index.html" title="Librairie de composants Tapestry" /> + <item name="Code Lutin" href="http://codelutin.com/"/> + </menu> + <menu ref="reports"/> </body> + </project> +
participants (1)
-
jcouteau@users.chorem.org