Page 1

Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

1. 1. 2.

Framework EDC

Page :1 28/02/08

Sommaire

Sommaire ........................................................................................................................... 1 Introduction ........................................................................................................................ 4 2.1. Schéma général........................................................................................................... 4 2.2. Fonctionalités du framework Cnaf ............................................................................. 5 2.3. Notion d’acte et de fonction ....................................................................................... 6 2.3.a. Fonction.............................................................................................................. 6 2.3.b. Acte .................................................................................................................... 6 2.3.c. Containeur de contexte de portée "Acte" ........................................................... 6 2.3.d. Containeur de contexte de portée "Fonction"..................................................... 6 3. Description détaillée........................................................................................................... 6 3.1. Validation et mise en forme ....................................................................................... 6 3.1.a. Page Jsp de génération ....................................................................................... 7 3.1.b. ScreenBean......................................................................................................... 7 3.1.c. ValidatedScreenBean ......................................................................................... 7 3.1.d. Constantes nom d’attribut .................................................................................. 8 3.1.e. Constantes de classe de style.............................................................................. 8 3.1.f. Protection d’un champ........................................................................................ 8 3.1.g. Déprotection d’un champ ................................................................................... 8 3.1.h. Protection de tous les champs d’un VSB ........................................................... 8 3.1.i. Annulation de la protection de tous les champs d’un VSB................................ 9 3.1.j. Modification du style d’un champ...................................................................... 9 3.1.k. Annulation de la modification de style d’un champ........................................... 9 3.1.l. Changement de style de tous les champs d’un VSB .......................................... 9 3.1.m. Annulation changement de style de tous les champs d’un VSB ........................ 9 3.1.n. Test de saisi d'un champ numérique................................................................... 9 3.1.o. Positionnement d’un onglet................................................................................ 9 3.1.p. Positionnement du focus sur un élément.......................................................... 10 3.1.q. Annulation du positionnement du focus........................................................... 10 3.1.r. Spécifique Action AJAX – Mise à jours d’une valeur d’un champ................. 10 3.1.s. Spécifique Action AJAX – Réinitialisation d’une valeur d’un champ ............ 10 3.1.t. Test de la validité d’un champ ......................................................................... 10 3.1.u. Outils ................................................................................................................ 10 3.2. Classe ClassUtils ...................................................................................................... 10 Gestion des données ......................................................................................................... 12 3.2.a. Rôle .................................................................................................................. 12 3.2.b. Nommage ......................................................................................................... 12 3.2.c. Instanciation ..................................................................................................... 12 3.2.d. Contexte Fonction ............................................................................................ 12 3.2.e. Attribut User..................................................................................................... 13 3.2.f. Résumé ............................................................................................................. 13 3.3. Classe Action pour formulaire à soumettre.............................................................. 14 3.3.a. Rôle .................................................................................................................. 14 3.3.b. Nommage ......................................................................................................... 14 3.3.c. Instanciation ..................................................................................................... 14 3.3.d. Méthodes à implémenter .................................................................................. 15


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :2 28/02/08

3.3.e. Résumé ............................................................................................................. 16 3.4. Classe Action pour formulaire sans « submit »........................................................ 17 3.4.a. Rôle .................................................................................................................. 17 3.4.b. Nommage ......................................................................................................... 17 3.4.c. Instanciation ..................................................................................................... 17 3.4.d. Méthode à implémenter.................................................................................... 17 3.4.e. Résumé ............................................................................................................. 18 3.5. Classe Action pour alimentation liste déroulante..................................................... 18 3.5.a. Rôle .................................................................................................................. 18 3.5.b. Nommage ......................................................................................................... 18 3.5.c. Instanciation ..................................................................................................... 18 3.5.d. Méthode à implémenter.................................................................................... 19 3.5.e. Résumé ............................................................................................................. 19 3.6. Classe Action pour traiter dynamiquement une Page HTML (technologie AJAX). 19 3.6.a. Rôle .................................................................................................................. 19 3.6.b. Nommage ......................................................................................................... 20 3.6.c. Instanciation ..................................................................................................... 20 3.6.d. Méthodes à implémenter .................................................................................. 20 3.6.e. Résumé ............................................................................................................. 20 3.7. Cinématique ............................................................................................................. 22 3.7.a. Rôle .................................................................................................................. 22 3.7.b. Nommage ......................................................................................................... 22 3.7.c. Instanciation ..................................................................................................... 22 3.7.d. Méthode(s) à développer .................................................................................. 22 3.7.e. Interface et méthode à implémenter pour notification de fin d'acte ................. 23 3.7.f. Exemple:........................................................................................................... 23 3.7.g. Résumé ............................................................................................................. 25 3.8. Cycle de vie des Actes et cinématique ..................................................................... 25 3.8.a. Règles régissant le cycle de vie des actes et des classes "GestionDonnees" associées 26 3.9. Classe ManagerContexte.......................................................................................... 27 3.9.a. Gestion des boutons ......................................................................................... 27 3.9.b. Test des boutons ............................................................................................... 27 3.9.c. La suppression d'un "acte" et du containeur de contexte associé..................... 27 3.9.d. La récupération de l'interface "sûreté" ............................................................. 28 3.9.e. La récupération du "Sender IW" pour émission d'un message à une autre fonction 28 3.9.f. Interactions avec la request HTTP ................................................................... 28 3.9.g. Récupération de propriétés associé au war....................................................... 28 3.9.h. Récupération d'information sur le contexte d'exécution .................................. 29 3.9.i. Emission d'un message d'information et d'un message de confirmation.......... 29 3.9.j. Activation d’une PopUp au chargement d’une Page........................................ 30 3.10. Affichage des erreurs............................................................................................ 30 3.10.a. Déclaration des clés des messages d’erreurs dans <cnaf-config.xml> ............ 31 3.10.b. Pour afficher un message d’erreur et marquer le(s) champ(s) concerné(s) par l'erreur : 31 3.10.c. Surcharge des messages d’Erreurs provenant du Framework.......................... 33 3.10.d. Affichage des Erreurs à partir d’une Action AJAX ......................................... 33


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :3 28/02/08

3.10.e. Affichage des Erreurs de validation JavaScript à partir d’une Action AJAX.. 35 3.11. Nommage et répertoire des éléments à coder....................................................... 35 4. Paramétrage ...................................................................................................................... 37 4.1. Le fichier web.xml ................................................................................................... 37 4.2. Le fichier cnaf-config.xml........................................................................................ 40 4.2.a. Boutons de soumission du formulaire. ............................................................. 42 4.2.b. Bouton Liens .................................................................................................... 42 4.2.c. Mapping sûreté ................................................................................................. 43 4.3. Le fichier struts-config.xml...................................................................................... 44 4.3.a. form-beans........................................................................................................ 44 4.3.b. forward et global forwards ............................................................................... 44 4.3.c. action ................................................................................................................ 45 4.3.d. Message Ressources ......................................................................................... 46 4.3.e. Plugin Tiles ...................................................................................................... 46 5. Annexe ............................................................................................................................. 47 5.1. Les exceptions FrameworkCnafException............................................................... 47 5.2. La page d'exception.................................................................................................. 50


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

2.

Framework EDC

Page :4 28/02/08

Introduction 2.1. Schéma général

Le schéma ci-dessous fait apparaître les éléments essentiel du framework Cnaf : Serveur J2EE Struts Présentation

Action/Contrôles/Preparation

Données (Métier)

Utilitaires

Cinématique

Diams

Vers central

Le framework Cnaf étend le framework open source Struts. Il y ajoute plusieurs fonctionnalités: • Des tags JSP décrits dans la documentation "DessinComposant.doc" et « Guide Utilisateur Java des Composants Graphiques.doc". • Un Système de composition de page (basé sur les "tiles" de struts) qui permet d'assembler plusieurs JSP. Ce système d'assemblage de page est décrit dans le document "Cadres de presentation.doc". • Un framework de validation et de mise en forme des données à afficher sur les formulaires. Ce framework de validation/mise en forme est décrit dans § 3.1 • Un découpage applicatif et une gestion de contexte associée à ce découpage (§ 2.3)


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :5 28/02/08

2.2. Fonctionalités du framework Cnaf Le framework Cnaf a les fonctions suivantes : 1. Activer la couche sûreté pour vérifier l’habilitation de l’utilisateur à effectuer la requête demandée 2. Activer la couche présentation pour effectuer les contrôles de syntaxe 3. Instancier et gérer la persistance en session HTTP des classes "conteneur de contexte" 4. Activer les contrôles de cohérence sur la saisie de l’utilisateur 5. Activer le code applicatif de traitement de la saisie de l’utilisateur 6. Activer les différents niveaux de contrôle de la cinématique pour déterminer l’Action suivante 7. Activer la préparation de l’affichage suivant 8. Activer la couche présentation: 9. Activer le formatage des données 10. Activer la Jsp de présentation 11. Gérer les exceptions Le schéma ci-dessous montre l’enchaînement de ces différents traitements dans un échange avec l'utilisateur: Saisie

Gestion des données

Sûreté

Validation syntaxique

Contrôles de cohérence

Traitement (mise à jour)

Cinématique

Préparation affichage

Formatage

JSP

Affichage


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :6 28/02/08

2.3. Notion d’acte et de fonction Le framework cnaf propose un découpage de l’application en « fonction(s) » et « acte(s) » ainsi qu’une gestion de contexte associée à ce découpage. 2.3.a. Fonction Une fonction est un ensemble applicatif autonome qui s’exécute dans un espace de présentation unique. Ce sous-ensemble applicatif peut optionnellement interagir avec une autre fonction au travers des mécanismes de communication inter fonctions de l'Intégration Web. Un contexte global à la fonction est instancié et mis à la disposition des classes actions de la fonction pour chaque utilisateur de la fonction et pour la durée de la session. Une fonction est constituée de 1 à n actes. 2.3.b. Acte Un Acte est un ensemble de classes "action" auxquelles est associé un conteneur de contexte. Ce conteneur de contexte est instancié pour chaque utilisateur pour la durée de vie de l’acte et mis à disposition de chaque classe action liée à l’acte. 2.3.c. Containeur de contexte de portée "Acte" Le containeur de contexte de portée "Acte" est représenté par une classe dérivé de "GestionDonnees". Voir § 0. L'association entre un acte et son containeur de contexte se fait dans le fichier de configuration "cnaf-config.xml". Voir § 4.2. Le cycle de vie des actes est décrit dans le § 3.8. 2.3.d. Containeur de contexte de portée "Fonction" Le containeur de contexte de portée "Fonction" est accessible à partir de la classe de base "GestionDonnees". Donc il est accessible à partir de chaque containeur de contexte de portée "Acte".

3.

Description détaillée 3.1. Validation et mise en forme Saisie

Gestion des données

Sûreté

Validation syntaxique

Contrôles de cohérence

Traitement (mise à jour)

Cinématique

Préparation affichage

Formatage

JSP

Affichage


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :7 28/02/08

La couche présentation du framework Cnaf met en œuvre les fonctions de validation et de formatage des données. Pour chaque page de l’application on trouve les objets suivants dans la couche présentation :   

Page Jsp de génération « Beans » de représentation des données dynamiques de la page en format externe : classe de base ScreenBean « Beans » de représentation des données dynamiques de la page en format interne avec un contenu satisfaisant aux règles de validations : classe de base ValidatedScreenBean 3.1.a. Page Jsp de génération

La page Jsp de génération est composée de balise HTML, de « tag » Cnaf. Elle ne comporte pas de javaScript (sauf généré) ni de java. les tag Cnaf exploitent principalement le ScreenBean pour les données dynamiques de la page. L’ensemble des liens présents sur une page Jsp doivent renvoyer vers une URL logique unique de traitement de la saisie (voir paragraphes « traitement de la saisie » et « Le fichier struts-config.xml ») 3.1.b. ScreenBean Toutes les données dynamiques de la page, qu’elles soient protégées ou modifiables (formulaire de saisie) sont représentées dans le ScreenBean par des attributs de type « String » ou « boolean » . Pour chaque groupe de données répétés le ScreenBean a un ArrayList de bean représentant le groupe de données. Les ScreenBean doivent être nommés : SbXxxxxxYyyyyy ou Xxxxxx = Acte, Yyyyyyy=nom de l’écran par exemple SbQuiloyDetail Le ScreenBean n’est jamais utilisé dans le code java de l’application. Il est utilisé dans les pages Jsp au travers des tags Cnaf. 3.1.c. ValidatedScreenBean Le ValidatedScreenBean est l’équivalent du ScreenBean sauf que les attributs sont typés : String, long double, boolean, ou CnafDate (format interne). La structuration des groupes de données répétés est la même que pour le ScreenBean. Les valeurs des attributs portées par le ValidatedScreenBean sont valides par rapport aux règles de validation extraites du dictionnaire Cristal. Les noms des attributs sont les noms Cobol des données élémentaires en minuscule. Le ValidatedScreenBean est utilisé dans le code java. C’est le représentant des données de l’IHM.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :8 28/02/08

Les classes générées dérivées du ValidatedScreenBean ont des constantes correspondant aux noms de leurs attributs . A travers la classe de base du ValidatedScreenBean, la protection ainsi que le style de présentation peut être modifié. 3.1.d. Constantes nom d’attribut Les noms des attributs sont représentés par une constante égale au nom du champ en majuscule suffixée par underscore (_). public static final String XXXXXX_ = "xxxxxx"; où xxxxxx est le nom de l'attribut. 3.1.e. Constantes de classe de style Certains des styles disponibles sont définis comme des constantes dans la classe de base ValidatedScreenBean grâce à l'interface IStyles : Nom attribut dans l'interface STYLE_OBLIGATOIRE STYLE_IMPORTANT STYLE_NORMAL STYLE_NUMEROTATION_PAGE STYLE_FLECHE_HAUT STYLE_FLECHE_BAS STYLE_CONSTANT STYLE_ICONE_TRANSPARENT

Commentaire Zone obligatoire Zone importante Zone ni obligatoire, ni importante Style spécifique à la numérotation de page Style utilisé avec le cnaf:icône pour avoir une flèche montante Style utilisé avec le cnaf:icône pour avoir une flèche descendante Style utilisé avec le cnaf:icône pour avoir une flèche horizontale Style utilisé avec le cnaf:icône pour faire disparaître l’icône

3.1.f. Protection d’un champ public void setProtected(String nomAttribut) Le paramètre nomAttribut identifie la donnée à laquelle s’applique la modification : le style associé au champ est automatiquement modifié. 3.1.g. Déprotection d’un champ public void setUnProtected(String nomAttribut) Le paramètre nomAttribut identifie la donnée à laquelle s’applique la modification : le style associé au champ est automatiquement modifié. 3.1.h. Protection de tous les champs d’un VSB public void setAllProtected(boolean recurse) Le booléen recurse indique si l’on doit propager l’attribut de protection aux Vsb sous-jacents. le style associé aux champs est automatiquement modifié.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :9 28/02/08

3.1.i. Annulation de la protection de tous les champs d’un VSB La méthode resetAllProtected Permet d’annuler l’effet d’un setAllProtected public void resetAllProtected(boolean recurse) Le booléen recurse indique si l’on doit propager le traitement aux Vsb sous-jacents. le style associé aux champs est automatiquement modifié. 3.1.j. Modification du style d’un champ public void setStyleClass(String nomAttribut, String styleClass) Le paramètre nomAttribut identifie la donnée à laquelle s’applique la modification. Le paramètre styleClass identifie la classe à affecter à la données (voir § 3.1.e) 3.1.k. Annulation de la modification de style d’un champ public void resetStyleClass (String nomAttribut) Le paramètre nomAttribut identifie la donnée à laquelle s’applique la modification : 3.1.l. Changement de style de tous les champs d’un VSB public void setStyleAllFields(String styleClass, boolean recurse) Le booléen recurse indique si l’on doit propager le style aux Vsb sous-jacents. 3.1.m. Annulation changement de style de tous les champs d’un VSB La méthode resetAllProtected Permet d’annuler l’effet d’un setAllProtected public void resetAllProtected(boolean recurse) Le booléen recurse indique si l’on doit propager le traitement aux Vsb sous-jacents. 3.1.n. Test de saisi d'un champ numérique public void isSaisie(String nomAttribut) Cette méthode teste si un champ a été saisie. Attention, cela ne fonctionne qu'avec un champ numérique de type CDNUM001 ou CDNUM002. Renvoi true si le champ a été saisi par l'utilisateur et false sinon. 3.1.o. Positionnement d’un onglet public void setOnglet (String clé,String libelle) Le paramètre clé identifie la clé correspondant à l’attribut selectedTabKeyName renseigné dans le tag cnaf :tabs de la JSP. Le paramètre libelle identifie le libellé correspondant à l’attribut key renseigné dans le tag cnaf :tab de la JSP.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :10 28/02/08

3.1.p. Positionnement du focus sur un élément public void setFocus (String nomAttribut) Le paramètre nomAttribut identifie l’élément du formulaire sur lequel sera positionné le focus. 3.1.q. Annulation du positionnement du focus. public void resetFocus () La méthode resetFocus annule l’effet d’un setFocus. Le focus sera alors positionné soit par l’attribut « focus » de la balise <cnaf :form> soit par défaut sur le premier élément « focusable » du formulaire. 3.1.r. Spécifique Action AJAX – Mise à jours d’une valeur d’un champ public void forceUpdate (String nomAttribut) Le paramètre nomAttribut identifie l’élément du formulaire que l’on souhaite réinitialiser (remettre à blanc) à partir d’une Action Ajax (ActionCnafAjax.java). 3.1.s. Spécifique Action AJAX – Réinitialisation d’une valeur d’un champ public void resetForceUpdate (String nomAttribut) la méthode resetForceUpdate annulle l’effet d’un precedent forceUpdate Le paramètre nomAttribut identifie l’élément du formulaire. 3.1.t. Test de la validité d’un champ public void isValid (String nomAttribut) Cette méthode test si un champ (nomAttribut) est valide. Un champ est valide si il est ni en Erreur, ni protégé. 3.1.u. Outils Les beans d’écran (ScreenBean et ValidatedScreenBean) sont des beans générés. Voir documentations dans le répertoire /envims/ico/documentation/guides/outils.

3.2. Classe ClassUtils La classe ClassUtils du package cnaf.framework.utils permet de récupérer des instances de classe : public static Object getNewInstanceOf(String className) Permet de récupérer une instance de la classe dont le chemin complet de classe est représenté par l’argument className. La classe doit disposer d’un constructeur sans paramètre.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

public static Object getSingleInstanceOf(String throws FrameworkCnafException

Page :11 28/02/08

className)

Permet de récupérer l’instance du singleton dont le chemin complet de classe est représenté par l’argument className. La classe doit disposer d’une méthode getInstance().


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :12 28/02/08

Gestion des données

Saisie

Gestion des données

Sûreté

Validation syntaxique

Contrôles de cohérence

Traitement (mise à jour)

Cinématique

Préparation affichage

Formatage

JSP

Affichage

La classe de gestion de données est le conteneur de contexte lié à chaque Acte. 3.2.a. Rôle Le rôle des classes de gestion des données consiste à assurer la Mémoire « cache » pour les données métier tout au long de la vie de l ’acte 3.2.b. Nommage Les classes dérivées de GestionDonnes doivent être nommés : GdXxxxxx où Xxxxxx = Acte, par exemple : GdQuiloy 3.2.c. Instanciation On trouve une classe de gestion des données par acte. Le framework assure l’instanciation, la persistance et la destruction des classes de gestion des données. A l’instanciation de la classe de gestion des données, le framework va activer la méthode init(). Avant de détruire la classe de gestion de données, le framework va activer la méthode terminate() public abstract void init() throws CnafException; public abstract void terminate() throws CnafException; 3.2.d. Contexte Fonction Pour permettre la collaboration de plusieurs actes au sein d’une fonction, la classe de base GestionDonnees fournit des méthodes permettant de partager du contexte. On nomme ce contexte le « contexte fonction ». Les données déposées dans ce contexte pourront être manipulées par toutes les classes de gestion de données qui collaborent au sein d’une fonction. Par exemple, au sein d’une liquidation (acte liquidation et GdLiquidation), le FGE Quiloy (acte Quiloy et GdQuiloy) doit


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :13 28/02/08

récupérer des informations sur le contexte de liquidation. Ces informations, initialisées par le GdLiquidation, seront lues par le GdQuiloy). Les méthodes de gestion de ce contexte sont les suivantes : public public boolean public

Object lireContexte( String cle ) boolean ecrireContexte(String cle, Object data, jspDispo) boolean deleteContexte( String cle )

La méthode ecrireContexte permet accessoirement de mettre à disposition les beans utilisés dans les jsp ; pour ce faire, il faut positionner le dernier paramètre (jspDispo) à « true »; par exemple le bean CtxBandeau doit être écrit en contexte de la façon suivante : this.ecrireContexte("CtxBandeau", bandeau, true);

3.2.e. Attribut User L’attribut User est à disposition de chaque classe de Gestion de données ; cette classe permet de disposer d’information sur l’utilisateur :    

Code Organisme Code Utilisateur NomUtilisateur Poste de l'utilisateur

Ces informations peuvent être récupérées au travers des méthodes suivantes : public public public public

String String String String

getCodeOrganisme() getCodeAgent() getIdentiteUtilisateur() getPoste()

3.2.f. Résumé Classe de Base

Nom, prototype GestionDonnees

Attribut

User

Méthode

public Object lireContexte( String cle ) public boolean ecrireContexte(String cle, Object data )

Méthode

Commentaire • Interface "métier" • Cache des données "métiers" • Appel des services Données diverses d’identification de l’utilisateur Lecture d’un objet du contexte fonction Ecriture d’un objet du contexte fonction


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur Méthode

public boolean deleteContexte( String cle ) public abstract void init() throws CnafException; public abstract void terminate() throws CnafException;

Méthode Méthode

Instanciation

Framework EDC

Page :14 28/02/08

Destruction d’un objet du contexte fonction Activée par le framework juste après l’instanciation de la classe Activée par le framework juste avant la destruction de la classe Le framework instancie un nouvel objet pour chaque utilisateur Le framework assure la persistance pour la durée de vie de l’acte

Persistance en session HTTP

3.3. Classe Action pour formulaire à soumettre

Saisie

Gestion des données

Sûreté

Validation syntaxique

Contrôles de cohérence

Traitement (mise à jour)

Cinématique

Préparation affichage

Formatage

JSP

Affichage

3.3.a. Rôle Le rôle des classes Action (classe de base ActionCnaf) est de préparer les données fonctionnelles à afficher (ValidatedScreenBean), de valider les saisies de l’utilisateur entre elles et par rapport au contenu de la base de données ou par rapport à une saisie antérieure, de traiter les saisies de l’utilisateur et enfin de déterminer la prochaine action 3.3.b. Nommage Les classes dérivées de ActionCnaf doivent être nommés : ActionXxxxxxYyyyyy ou Xxxxxx = Acte, Yyyyyyy=nom de l’écran ; par exemple : ActionQuiloyDetail 3.3.c. Instanciation Les classes Action doivent être des singletons (une seule instance de classe dans une machine virtuelle java). (une seule instance de classe dans une machine virtuelle java). La méthode GetInstance n’a pas à être codée pour ces classes.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :15 28/02/08

3.3.d. Méthodes à implémenter Le code de préparation du VSB doit être implémenté dans la méthode suivante : public ValidatedScreenBean prepare( GestionDonnees gd, ManagerContexte mgt )throws CnafException

Le code de vérification de la cohérence doit être implémenté dans la fonction suivante : public ActionErrorsCnaf verifier( ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt) throws CnafException  Le paramètre vsb représente les données fonctionnelles en format interne sur lesquelles doivent s’appliquer les contrôles de cohérence.  Le paramètre gd représente l’objet de gestion des données de l’acte  Le paramètre mgt permet d’agir sur la request J2EE. voir description de l’objet mgt dans le chapitre adéquat. Le code de traitement de la saisie doit être implémenté dans la fonction suivante : public ActionErrorsCnaf performCnaf( ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt ) throws CnafException  Le paramètre vsb représente les données fonctionnelles en format interne sur lesquelles doivent s’appliquer les traitements.  Le paramètre gd représente l’objet de gestion des données de l’acte  Le paramètre mgt permet d’agir sur la request J2EE. voir description de l’objet mgt dans le chapitre adéquat.

Le code permettant de prendre une décision d'enchaînement vers une autre classe action (ou la même) doit être implémenté dans la fonction suivante: public String DeterminerActionSuivante(ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt) throws CnafException  La valeur de retour (String) doit être un nom logique de « Forward » défini dans le fichier struts-config.xml soit au niveau de l’action elle même, soit au niveau global de l’application.  Une valeur de retour nulle signifie que l’acte auquel appartient cette action est terminé.  Deux constantes de la classe de base permettent de spécifier un retour particulier : • FORWARD_NO_UPDATE : à retourner si la requête en cours ne doit pas renvoyer de réponse (la requête se termine après l’exécution de la méthode)


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :16 28/02/08

FORWARD_TERMINER : à retourner si que la requête est associé à une JSP « PopUp » et a été initié par un bouton de fermeture avec soumission du formulaire. Vous trouverez plus d’information sur ces deux Forward particuliers dans le document Guide « Utilisateur Java Des Composants Graphiques.doc ». 3.3.e. Résumé

Classe de Base Méthode

Méthode

Méthode

Méthode

Instanciation Persistance en session HTTP

Nom, prototype ActionCnaf public ValidatedScreenBean prepare( GestionDonnees gd, ManagerContexte mgt ) throws CnafException public ActionErrorsCnaf verifier( ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt)

Commentaire Traitement de la saisie utilisateur Préparation de l’affichage

public ActionErrorsCnaf performCnaf( ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt ) throws CnafException public String determinerActionSuivante( ValidatedScreenBean vsb, GestionDonnees gd, ManagerContexte mgt) throws CnafException

Traitement de la saisie utilisateur

Code de vérification de la cohérence des saisies de l’utilisateur

Cinématique

Classe singleton, une seule instance par machine virtuelle Sans objet, cette classe ne porte pas de données mais uniquement du traitement


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :17 28/02/08

3.4. Classe Action pour formulaire sans « submit »

Saisie Sûreté

Gestion des données

Préparation affichage

Formatage

JSP

Affichage

3.4.a. Rôle Le rôle des classes Action (classe de base ActionCnafConsultation) est de préparer les données fonctionnelles à afficher (ValidatedScreenBean), 3.4.b. Nommage Les classes dérivées de ActionCnafConsultation doivent être nommés : ActionXxxxxxYyyyyy ou Xxxxxx = Acte, Yyyyyyy=nom de l’écran ; par exemple : ActionFicheClientDetail 3.4.c. Instanciation Les classes Action doivent être des singletons (une seule instance de classe dans une machine virtuelle java). (une seule instance de classe dans une machine virtuelle java). La méthode GetInstance n’a pas à être codée pour ces classes. 3.4.d. Méthode à implémenter Le code de préparation du VSB doit être implémenté dans la méthode suivante : public ValidatedScreenBean prepare( GestionDonnees gd, ManagerContexte mgt )throws CnafException


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :18 28/02/08

3.4.e. Résumé

Classe de Base Méthode

Nom, prototype ActionCnaf public ValidatedScreenBean prepare( GestionDonnees gd, ManagerContexte mgt ) throws CnafException

Instanciation

Commentaire Traitement de la saisie utilisateur Préparation de l’affichage

Classe singleton, une seule instance par machine virtuelle Sans objet, cette classe ne porte pas de données mais uniquement du traitement

Persistance en session HTTP

3.5. Classe Action pour alimentation liste déroulante

Saisie

Gestion des données

Sûreté

Préparation affichage

Maj liste

3.5.a. Rôle Le rôle des classes Action Combo (classe de base ActionCnafListeCombo) est de préparer les données à afficher dans une liste déroulante en fonction d’un discriminant. Ce type de classe Action intervient dans le cadre des listes déroulantes liées entre elles. Pour plus de détails voir le document « Guide Utilisateur Java Des Composants Graphiques.doc » 3.5.b. Nommage Les classes dérivées de ActionCnafListeCombo doivent être nommées : ActionComboYyyyyy ou Yyyyyyy=nom de la combo dont il faut déterminer la liste ; par exemple : ActionComboCommune pour la classe action qui doit déterminer la liste des communes en fonction d’un discriminant 3.5.c. Instanciation Les classes Action doivent être des singletons (une seule instance de classe dans une machine virtuelle java). (une seule instance de classe dans une machine virtuelle java). La méthode GetInstance n’a pas à être codée pour ces classes.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :19 28/02/08

3.5.d. Méthode à implémenter public ListeCombo prepareListeCombo(GestionDonnees gd, ManagerContexte mgt,String dis) throws CnafException La classe cnaf.framework.runtime.ListeCombo est une Liste de cnaf.framework.runtime.ComboRecord. Elle représente la liste des options (ComboRecord.cle) et labels (ComboRecord.libelle) à afficher dans la liste déroulante. 3.5.e. Résumé

Classe de Base

Méthode

Nom, prototype ActionListeCombo

Commentaire Construction d’une liste d’options/labels pour une liste déroulante public ListeCombo Préparation de la liste prepareListeCombo(Gestion Donnees gd, ManagerContexte mgt,String dis) throws CnafException

Instanciation

Classe singleton, une seule instance par machine virtuelle Sans objet, cette classe ne porte pas de données mais uniquement du traitement

Persistance en session HTTP

3.6. Classe Action pour traiter dynamiquement une Page HTML (technologie AJAX) Evt Js Sûreté

Validation syntaxique

Gestion des données

Traitement (mise à jour)

Conversion XML

Librairie Javascript Maj Affichage

3.6.a. Rôle Le rôle des classes Action AJAX(classe de base ActionCnafAjax) est de traiter les données fonctionnelles issues d’un formulaire (ValidatedScreenBean), de valider les saisies de l’utilisateur entre elles et de préparer un Vsb de mise à jour du formulaire.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :20 28/02/08

A partir de toutes ces informations, un flux XML sera créé et envoyé comme réponse du Serveur. La procédure AJAX, permet, côté client d’interpréter en Javascript la réponse du Serveur. Ce nouveau dispositif permettra de mettre à jours une page déjà affichée en agissant sur : - Le contenu des champs Input et Textarea - La protection/deprotection unitaire des champs Input et Textarea - La protection/deprotection unitaire des liens, PopUps - Le changement de Style des champs Input et Textarea - La protection/Deprotection des boutons - Le positionnement du Focus - L’affichage des Messages d’Erreurs et des messages d’informations - Le contenu, le style et la protection /deprotection d’une Grille - La protection/deprotection unitaire des onglets 3.6.b. Nommage Les classes dérivées de ActionCnafAjax doivent être nommés : ActionAjaxYyyyyy ou Yyyyyyy=nom de l’écran ; par exemple : ActionAjaxDetail 3.6.c. Instanciation Les classes Action doivent être des singletons (une seule instance de classe dans une machine virtuelle java). (une seule instance de classe dans une machine virtuelle java). La méthode GetInstance n’a pas à être codée pour ces classes. 3.6.d. Méthodes à implémenter Le code de traitement du VSB doit être implémenté dans la méthode suivante : public ValidatedScreenBean performCnafAjax(ValidatedScreenBean superVsb, ActionErrorsCnaf errs, ManagerContexte mgt, GestionDonnees gd) throws CnafException { Le paramètre superVsb représente les données fonctionnelles issues du formulaire, en format interne, sur lesquelles doivent s’appliquer les traitements (Attention, la validation formelle n’est pas bloquante. Le vsb mis à disposition peut contenir des erreurs de validation : la méthode isValid(property) permet de vérifier la validité d’un champ).  Le paramètre gd représente l’objet de gestion des données de l’acte  Le paramètre mgt permet d’agir sur la request J2EE. voir description de l’objet mgt dans le chapitre adéquat.  Le paramètre errs correspond à une instance d’une ActionErrorsCnaf ayant une référence sur les erreurs de validation formelle du vsb « superVsb ». La gestion particulière des erreurs pour une Action de type Ajax est expliquée dans le §0  La valeur de retour ValidatedScreenBean servira à mettre à jour le formulaire initiateur de la requête. 3.6.e. Résumé

Classe de Base Méthode

Nom, prototype ActionCnafAjax public ValidatedScreenBean

Commentaire Traitement de la saisie utilisateur Traitement des données et Préparation


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :21 28/02/08

performCnafAjax(ValidatedS de lâ&#x20AC;&#x2122;affichage creenBean superVsb,ActionErrorsCnaf errs, GestionDonnees gd, ManagerContexte mgt ) throws CnafException Instanciation Classe singleton, une seule instance par machine virtuelle Persistance en session Sans objet, cette classe ne porte pas de HTTP donnĂŠes mais uniquement du traitement


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :22 28/02/08

3.7. Cinématique Saisie

Gestion des données

Sûreté

Validation syntaxique

Contrôles de cohérence

Traitement (mise à jour)

Cinématique

Préparation affichage

Formatage

JSP

Affichage

3.7.a. Rôle Les classes de contrôle de la cinématique (classe de base ControleurCinematique) sont des classes de traitement permettant deux choses:  être notifié de la fin d'un acte (optionnel grâce à l'interface CCHandlerFin)  de prendre une décision d’enchaînement au niveau d'un acte lorsque l'acte collaboratif de niveau inférieur se termine. On trouve un contrôleur de cinématique par acte. 3.7.b. Nommage Les classes dérivées de ControleurCinematique doivent être nommés : CcXxxxxx où Xxxxxx = Acte, par exemple : CcQuiloy 3.7.c. Instanciation Les classes dérivées de ControleurCinematique doivent être des singletons (une seule instance de classe dans une machine virtuelle java). Pour ce faire, les classes de contrôle de la cinématique doivent implémenter le code suivant : protected static CcXxxxxxc me = new CcXxxxx(); public static CcXxxxxx getInstance() { return me; } 3.7.d. Méthode(s) à développer Les contrôleurs de cinématique doivent gérer la fin des actes sous-jacents. Pour ce faire, une méthode unique doit être codée : public String determinerActeSuivant ( GestionDonnees gd, String acte, ManagerContexte mgt) throws CnafException


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :23 28/02/08

 La valeur de retour (String) doit être un nom logique de « Forward » défini dans le fichier struts-config.xml au niveau global de l’application.  Une valeur de retour nulle signifie que l’acte doit être terminé.  Deux constantes de la classe de base permettent de spécifier un retour particulier : • FORWARD_NO_UPDATE : à retourner si la requête en cours ne doit pas renvoyer de réponse (la requête se termine après l’exécution de la méthode) • FORWARD_TERMINER : à retourner si que la requête est associé à une JSP « PopUp » et a été initié par un bouton de fermeture avec soumission du formulaire. Vous trouverez plus d’information sur ces deux Forward particuliers dans le document Guide « Utilisateur Java Des Composants Graphiques.doc ». 3.7.e. Interface et méthode à implémenter pour notification de fin d'acte Pour que le contrôleur de cinématique d'un acte soit notifié de la fin de l'acte auquel il appartient, il convient d'implémenter l'interface CCHandlerFin. Cette implémentation est optionnelle. import cnaf.framework.runtime.*; import cnaf.framework.*; public class CcXxxx extends ControleurCinematique implements CCHandlerFin { La méthode suivante doit être codée: public void terminateActe (GestionDonnees gd, ManagerContexte mgt) throws CnafException 3.7.f. Exemple: Considérons: Un acte A composé de deux classes action A1 (JSPA1) et A2(JSPA2), d'un GdA et d'un CcA. Un acte B composé d'une classe action B1 (JSPB1), d'un GdB et d'un CcB. (Le CcB a implémenté l'interface CCHandlerFin de façon à être notifié de la fin de l'acte auquel il appartient). Le scénario d'exécution est le suivant:  Activation de la fonction sur la classe Action A1.  Enchaînement de A1 sur B1  Retour de B1 sur A2 en terminant l'acte B. Le tableau ci-dessous montre pour chaque étape les classes en cause et les méthodes activées: Etape du scénario Activation de la fonction sur la classe A1

Classe Instanciation de GdA

Méthode

Valeur de retour


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :24 28/02/08

GdA A1

init() prepare(gdA, mgt)

A1 A1 A1

verifier(vsb, gdA,mgt) PerformCnaf(vsb,gdA,mgt) DeterminerActionSuivante(vsb,gdA, Forward vers mgt) B1

Vsb

Affichage JSPA1

Retour JSPA1

Instanciation de GdB GdB Init() B1 prepare(gdB, mgt)

Vsb

Affichage JSPB1 B1 B1 B1 Retour JSPB1

Affichage JSPA2

verifier(vsb, gdB,mgt) performCnaf(vsb,gdB,mgt) determinerActionSuivante(vsb,gdB, Null mgt) terminateActe(gdB, mgt) terminate()

CcB GdB Release de l'instance de GdB CcA

determinerActeSuivant(gdA, mgt)

A2

prepare(gdA, mgt)

Forward vers A2 Vsb


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :25 28/02/08

3.7.g. Résumé Nom, prototype Classe de Base ControleurCinematique Méthode public String determinerActeSuivant ( GestionDonnees gd, String acte, ManagerContexte mgt)

Commentaire Contrôle de la cinématique Détermination de l’action suivante pour le cas où un acte activé précédemment par l’acte courant s’est terminé

Méthode

Notification de fin d'acte

public void terminateActe (GestionDonnees gd, ManagerContexte mgt) throws CnafException

Instanciation Persistance en session HTTP

Classe singleton, une seule instance par machine virtuelle Sans objet, cette classe ne porte pas de données mais uniquement du traitement

3.8. Cycle de vie des Actes et cinématique Le cycle de vie des actes (et donc des conteneurs de contexte associé) est conditionné par trois types d’évènements : • • • •

Instanciation: une classe action est activée et aucun conteneur de contexte correspondant à cette classe action n'existe. Le conteneur de contexte de l'acte est instancié. Activation: une classe action est activée et l'acte associé à cette classe existe. L'acte est activé et devient l'acte courant. Suspension : une classe action est activée. Cette classe action n'est pas associée à l'acte courant. L'acte courant est suspendu. Terminaison: • par une classe action de l'acte qui renvoie "null" sur sa méthode "determinerActionSuivante" • par une demande explicite d'une classe action de suppression d'un acte (méthode " supprimerActe" du ManagerContexte).

Exemple: Pour une fonction on peut avoir une association action/acte telle que dans le tableau cidessous: Actions action 1 action 2 action 3 action 4

Actes acte A acte A acte B acte C


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :26 28/02/08

Le tableau ci-dessous illustre le cycle de vie des actes. A un instant "t" il y a un seul acte "courant". C'est celui qui est passé aux classes qui dérivent de ActionCnaf ou de ControleurCinématique. Au cours de l'éxécution de la fonction les actes sont empilés. L’ordre dans la pile est important : il est déterminé par la chronologie des activations. Dans le tableau ci-dessous, l'acte courant à l'issue de l'événement décrit dans la colonne de gauche apparaît en gras dans la colonne " Etat de la pile des actes": Evènement

Effet sur les Actes

Requête initiale sur action1 DAS sur action1 = action 4 DAS sur Action4 = null (CcActeA répond action2) Dans page 2, Lien qui renvoie vers action3 DAS action3 = action4 Dans page 4, Lien qui renvoie vers Action3 BoutonLien sur page3 qui renvoie vers action1 DAS action1 = action3 action 3 demande la terminaison de A et C

Activation A Activation C Terminate sur C A courant Activation B Activation C B courant Terminate B A courant Activation B Terminate sur A et C

• • • • •

Etat de la pile des actes A A/C A A/B A/B/C A/B/C A/C A/C/B B

3.8.a. Règles régissant le cycle de vie des actes et des classes "GestionDonnees" associées Règle n° 1 : à l’activation d’une action l’acte qui lui associé (struts-config) est activé par le framework s’il n’existe pas dans la pile des actes. Le gd associé à l’acte est mis à disposition de la classe action. Règle n°2 : lorsqu’une classe action répond « null » à la méthode DaS, l’acte est terminé et le CC de l’acte précédent dans la pile est interrogé sur sa méthode DAS. Règle n°3 : si un Cc répond null sur sa méthode DAS l’acte correspondant est terminé et le CC de l’acte précédent dans la pile est interrogé sur sa méthode DAS. Règle n°4 : si le Cc de l’acte à la base de la pile répond null, une exception est levée. Règle n°5 : une action peut demander la terminaison d’un ou plusieurs Actes sauf celui qui lui est associé.

DaS = "determinerActionSuivante" DAS = "determinerActeSuivant"


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :27 28/02/08

3.9. Classe ManagerContexte Cette classe permet d’interagir avec le framework pour gérer plusieurs choses :          

L’activation/désactivation des boutons ou des "BoutonLien" Le test des boutons La suppression d'un "acte" et du containeur de contexte associé La récupération de l'interface "sûreté" La récupération du "Sender IW" pour émission d'un message à une autre fonction Les interactions avec la request Http La récupération des properties de l’application La récupération d'information sur le contexte d'exécution Des messages (msgBox), des messages de confirmation, mono et multi-lignes L’activation d’une PopUp au chargement d’une page

3.9.a. Gestion des boutons On peut activer ou désactiver un bouton en passant en paramètre son identifiant. La valeur de retour indique si le bouton a bien été trouvé. Initialement un bouton est actif. public boolean disableBouton(String idBouton) public boolean enableBouton(String idBouton) On peut rendre visible ou invisible un bouton en passant en paramètre son identifiant. La valeur de retour indique si le bouton a bien été trouvé. Initialement un bouton est visible public boolean boutonVisible(String idBouton) public boolean boutonInvisible(String idBouton){

3.9.b. Test des boutons On peut tester le bouton activé par l’utilisateur. public String getBtnAction() On peut tester si le bouton activé par l’utilisateur est « Valider » ou « confirm » ou « confirmMono » : public boolean isBtnValider() public boolean isBtnConfirm() public boolean isBtnConfirmMono()

3.9.c. La suppression d'un "acte" et du containeur de contexte associé On peut supprimer un acte. Le framework termine la classe GestionDonnees associé à l'acte. (appel de la méthode terminateActe du ControleurCinematique associé si implémentation de l'interface CCHandlerFin dans le ControleurCinematique et appel de la méthode terminate de la classe GestionDonnees associée) Une classe action ne peut pas supprimer l'acte auquel elle est associée (FrmkCnafException "FrmkCnaf_20".


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :28 28/02/08

public void supprimerActe(String nomActe) throws CnafException 3.9.d. La récupération de l'interface "sûreté" On peut récupérer l'interface de gestion de la sûreté pour gérer dans l'application les habilitations: public InterfaceSurete getInterfaceSurete() InterfaceSureté est une classe du package cnaf.framework.surete.web 3.9.e. La récupération du "Sender IW" pour émission d'un message à une autre fonction On peut récupérer le "sender" IW pour communiquer avec d'autres fonctions de l'activité: public Sender getIwSender() Sender est une classe du package cnaf.integrationweb.communication. 3.9.f. Interactions avec la request HTTP On peut Lire des Request Parameters ou Request Attributes, écrire des Request Attributes. public public public public

HttpServletRequest getRequest() String getRequestParameter( String key) Object getRequestAttribute( String key) void setRequestAttribute( String key, Object o)

3.9.g. Récupération de propriétés associé au war Le framework Cnaf permet de définir un fichier de properties externe au war ; la classe ManagerContexte permet de récupérer unitairement ou globalement ces properties. Ce fichier de properties est indiqué au framework par le paramètre d’initialisation « ParametresExternes » du fichier web.xml : …. <servlet> <servlet-name>startup</servlet-name> <servlet-class>cnaf.framework.runtime.startup.StartupServlet</servletclass> <init-param> <param-name>ParametresExternes</param-name> <param-value>/appli.properties</param-value> </init-param> …

Pour récupérer l’ensemble des properties du fichier : public Properties getWarProperties()


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :29 28/02/08

Pour récupérer une property particulière : public String getWarProperty(String key) Pour récupérer un property particulière avec une valeur par défaut si la propertie n’est pas présente dans le fichier : public String getWarProperty(String key, String defaultValue) 3.9.h. Récupération d'information sur le contexte d'exécution public FrmkCnafInfo getFrmkCnafInfo() Cette méthode renvoie un Bean FrmkCnafInfo contenant des informations sur les contextes d'exécution :  Le nom de l'acte en cours public String getActe()  Le nom de l'acte précédent public String getPrevActe()  Le nom de l'action en cours public String getAction()  Le nom de l'action précédente public String getPrevAction()  Le nom de la fonction public String getFonction()  Le nom de la tache public String getTache()  Le nom du bouton action précédent public String getPrevBtnAction() 3.9.i. Emission d'un message d'information et d'un message de confirmation Méthode permettant de positionner un message (msgBox) : public void setMessage(String value) Méthode permettant de positionner un message (msgBox) multi-lignes : public void setMessage(List value) Méthode permettant de positionner un message de confirmation : public void setConfirm(String value) Méthode permettant de positionner un message de confirmation multi-lignes: public void setConfirm(List value) Méthode permettant de positionner un message de confirmation avec seulement le bouton OK: public void setConfirm(String value,boolean monoBoutonOk) Méthode permettant de positionner un message de confirmation multi-lignes avec seulement le bouton OK: public void setConfirm(List value, boolean monoBoutonOk) Méthode permettant de supprimer un message de confirmation :


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :30 28/02/08

public void removeConfirm() Méthode permettant de supprimer un message de confirmation avec seulement le bouton OK : public void removeConfirm(boolean monoBoutonOk) Méthode permettant de supprimer un message: public void removeMessage() 3.9.j. Activation d’une PopUp au chargement d’une Page Méthode permettant d’activer une PopUp au démarrage : public void setPopUp(String id) Le paramètre id correspond à l’identifiant de la PopUp défini dans la JSP : <cnaf:info id="infoId" …

3.10. Affichage des erreurs Il est possible de définir plusieurs niveaux de fichiers de message d’erreur qui pourront être affecté aux fonctions et aux actes : 1- n fichier d’erreur au niveau de la fonction 2- n fichiers d’erreur au niveau de chaque acte Ces fichiers doivent être déclarés dans le fichier struts-config.xml en leur attribuant une clé, par exemple: <!-- ========== Message Resources Definitions ============================ --> <message-resources key="Global1" parameter="appli.msgGlobal1Ressources"/> <message-resources key="Global2" parameter="appli.msgGlobal2Ressources"/> <message-resources key="Local1" parameter="appli.msgLocauxFGE1"/> <message-resources key="Local2" parameter="appli.msgLocauxFGE2"/> <message-resources key="Local3" parameter="appli.msgLocauxFGE3"/> ...

Attention : l’attribut parameter doit renseigner le nom du fichier .properties avec son chemin complet séparé par des . et non par des /. Voici un exemple de contenu du fichier se trouvant sous le répertoire appli, msgLocauxFGE1.properties : error.FGE1.traitement1=<LI>Le error.FGE1.traitement2=<LI>Le error.FGE1.traitement3=<LI>Le error.FGE1.traitement4=<LI>Le

traitement traitement traitement traitement

1 2 3 4

n’est n’est n’est n’est

pas pas pas pas

bon</LI> bon</LI> bon</LI> bon</LI>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :31 28/02/08

3.10.a.Déclaration des clés des messages d’erreurs dans <cnafconfig.xml> Pour associer un fichier de message d’erreur à un acte ou une fonction il faut utiliser les tag XML <msgGlobaux> à l’intérieur du tag <fonction> ou <msgLocaux> à l’intérieur du tag <acte> Exemple : <cnaf-config> <fonction nom="SDP"> <msgGlobaux>Global1</msgGlobaux> <msgGlobaux>Global2</msgGlobaux> .. </fonction> <acte nom="SuiviPiece" gdClass=".." ccClass=".."> <msgLocaux>Local1</msgLocaux> <msgLocaux>Local2</msgLocaux> .. </acte> <acte nom="SuiviPieceDetail" gdClass=".." ccClass=".."> <msgLocaux>Local3</msgLocaux> .. </acte> </cnaf-config>

Attention : Si le message d’erreur suivant apparaît : Erreur dans la recherche de la clé de message : <clé>, il s’agit sûrement d’une erreur de clé entre struts-config.xml et <cnaf-config.xml>. 3.10.b.Pour afficher un message d’erreur et marquer le(s) champ(s) concerné(s) par l'erreur : Les méthodes verifier et performCnaf des classes ActionCnaf, ont une Valeur de retour du type ActionErrorsCnaf Cette valeur de retour correspond à une collection d’objets du type ActionErrorCnaf. Les objets ActionErrorCnaf sont ajoutés à la collection par la méthode suivante de la classe ActionErrorsCnaf : Pour afficher l'erreur dans le bandeau d'erreur sans marquer aucun champ en erreur: public void enregistre(ActionErrorCnaf erreur) Pour afficher l'erreur dans le bandeau d'erreur et marquer un champ en erreur: public void enregistre(String champ, ActionErrorCnaf erreur, ValidatedScreenBean vsb)


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :32 28/02/08

Pour afficher l'erreur dans le bandeau d'erreur et marquer deux champs en erreur: public void enregistre(String champ1, String champ2, ActionErrorCnaf erreur, ValidatedScreenBean vsb) Pour afficher l'erreur dans le bandeau d'erreur et marquer trois champs en erreur: public void enregistre(String champ1, String champ2, String champ3, ActionErrorCnaf erreur, ValidatedScreenBean vsb) Pour afficher l'erreur dans le bandeau d'erreur et marquer quatre champs en erreur: public void enregistre(String champ1, String champ2, String champ3, String champ4, ActionErrorCnaf erreur, ValidatedScreenBean vsb) Pour ces 5 méthodes les arguments ont la signification suivante: champ, champ1, champ2, champ3, champs4 : nom des champs auxquels s’applique l’erreur erreur : l’erreur à ajouter à la collection vsb : le VSB auquel appartient le champ en erreur L’erreur (de type ActionErrorCnaf) doit être instanciée grâce à l’un des constructeurs suivants : public ActionErrorCnaf(String public ActionErrorCnaf(String public ActionErrorCnaf(String value1) public ActionErrorCnaf(String value1, Object value2 public ActionErrorCnaf(String value1, Object value2, Object

key) key, Object value0) key, Object value0, Object key, Object value0, Object key, Object value0, Object value3)

où key : correspond à la clef dans le fichier ApplicationRessource.properties value0, value1, value1, value2, value3 correspondent à {0}, {1} dans le fichier de ressources correspondant. Exemple de renvoie d’erreur sur le champ « selcreat » : … public ActionErrorsCnaf verifier( ValidatedScreenBean superVsb, GestionDonnees gd, ManagerContexte mgt) throws CnafException { VsbPaitieSelect vsb = (VsbPaitieSelect) superVsb; ActionErrorsCnaf errs = new ActionErrorsCnaf(); if (vsb.getSelcreat())


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :33 28/02/08

{ ActionErrorCnaf err = new ActionErrorCnaf("error.badformat", " création interdite"); errs.enregistre("selcreat", err, vsb); } return errs; }

Attention: un champ définit statiquement comme "disabled" dans la JSP ne peut être marqué en erreur: sa valeur n'apparaîtra pas sur la page. Si l'on veut marquer en erreur un champ protégé, ce ne pourra être qu'un champ protégé dynamiquement (voir § 3.1.f). 3.10.c.Surcharge des messages d’Erreurs provenant du Framework Il est possible de surcharger, pour une property particulière, les messages d’erreurs liées aux validations syntaxiques effectuées par le Framework. Le message peut être surchargé en déclarant dans un fichier de properties de message d’erreur applicatif, une clef constituée de (property+code erreur). Exemple de surcharge de la property maproperty et le code Erreur « Framework » error.NG.incorrectLong : Déclaration dans le fichier d’erreur Applicatif : maproperty.error.NG.incorrectLong=Ma Property n’est pas un nombre entier < 50

N.B : La liste des codes erreurs provenant du Framework est disponible dans la documentation « Module de Validation NIMS.doc $4.2 Codes erreurs »

3.10.d.Affichage des Erreurs à partir d’une Action AJAX La méthode performCnafAjax a un paramètre de type ActionErrorsCnaf. Ce paramètre doit être utilisé pour renvoyer les erreurs détectées pendant le traitement en utilisant les méthodes classiques (§3.10.b). Les erreurs de validation formelle ne sont pas bloquantes pour une ActionCnafAjax et par défaut les messages ne seront pas affichés. Le VSB en retour de la méthode performCnafAjax peut être : - Un nouveau VSB (Vsb local créé dans la méthode) - Le VSB en paramètre de la méthode performCnafAjax Le choix de ce VSB implique 2 façons différentes de traiter l’affichage des messages d’erreurs et l’indication visuelle des erreurs (champs en rouge) 1/ Nouveau Vsb :


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :34 28/02/08

Ce VSB ne comporte aucune information d’indication visuelle d’erreur Ces erreurs de validation formelle peuvent être affichées grâce aux méthodes suivantes : - Méthode copyAllValidationErrorCnaf() o Cette méthode permet d’ajouter toutes les erreurs provenant de la validation formelle du VSB sans indication visuelle des champs en Erreur - Méthode copyAllValidationErrorCnaf(ValidatedScreenBean vsb) o Cette méthode permet d’ajouter toutes les erreurs provenant de la validation formelle du VSB avec indication visuelle des champs en Erreur - Méthode copyValidationErrorCnaf(String champ,ValidatedScreenBean vsb) o Cette méthode permet d’ajouter un objet ActionErrorCnaf de la collection d’Erreur provenant de la validation formelle du champ référencé. Exemple de traitement des erreurs : Public ValidatedScreenBean performCnafAjax(ValidatedScreenBean superVsb, ActionErrorsCnaf errs, ManagerContexte mgt, GestionDonnees gd) throws CnafException { VsbChamps vsb =(VsbChamps)superVsb; VsbChamps vsbRetour =new VsbChamps(); if(!vsb.isValid(VsbChamps.DOSSIER_)) errs.copyValidationErrorCnaf(VsbChamps.DOSSIER_, vsbRetour); return vsbRetour ; 2/ Vsb en paramètre de la méthode performCnafAjax : Ce VSB comporte toutes les informations d’indication visuelle d’erreur. Par défaut les messages d’erreurs ne sont pas traités, pour être cohérent avec ce défaut, il convient de supprimer les indications visuelles d’erreurs rattachées au VSB. La suppression de ces indications visuelles peut être conditionnée grâce aux méthodes suivantes du VSB: - Méthode resetAllErreur() o Cette méthode permet d’effacer toutes les indications visuelles d’erreurs rattachées au VSB. - Méthode resetEnErreur(String nomProperty) o Cette méthode permet d’effacer l’indication visuelle d’erreur rattachée à une property du VSB. Il est ensuite possible d’utiliser les 3 méthodes de traitement des erreurs précédemment citées (copyAllValidationErrorCnaf, copyValidationErrorCnaf). Exemple de traitement des erreurs :


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :35 28/02/08

Public ValidatedScreenBean performCnafAjax(ValidatedScreenBean superVsb, ActionErrorsCnaf errs, ManagerContexte mgt, GestionDonnees gd) throws CnafException { VsbChamps vsb =(VsbChamps)superVsb; if(!vsb.isValid(VsbChamps.DOSSIER_)){ vsb.resetAllErreur(); errs.copyValidationErrorCnaf(VsbChamps.DOSSIER_, vsb); } return vsb ; 3.10.e.Affichage des Erreurs de validation JavaScript à partir d’une Action AJAX La validation JavaScript effectuée sur la page (passage automatique en erreur d’une liste déroulante) n’est pas prise en compte automatiquement en AJAX. Après un aller/retour AJAX, ces champs, qui étaient en erreur, reviennent à leur style initial. Différentes méthodes ont été mises en place au niveau de la classe ActionErrorsCnaf pour permettre au développeur de gérer ces erreurs potentielles : • getErrsValidationJS() : o Cette méthode permet de récupérer un tableau contenant les property des composants mis en erreur via une validation JavaScript. • addOriginalErrorOnPage(champ) : o Cette méthode permet de peindre un champ en erreur. • addOriginalErrorOnPage(champ,msgErr) : o Cette méthode permet de peindre un champ en erreur tout en précisant un message d’erreur particulier (si la liste déroulante a un message d’erreur personnalisé) • addAllOriginalErrorOnPage() : o Cette méthode permet de peindre en erreur tous les champs remontés par getErrsValidationJS().

3.11. Nommage et répertoire des éléments à coder Considérons l’acte «Xxxxxx », dont l’IHM est composé de 2 pages HTML : « Liste » et « Détail ». Le tableau ci dessous montre les classes qui doivent être codées pour chacune des étapes, les classes de Base et le rôle de chacune de ces classes. Type

JSP JSP

Classe de Base

Nom de la classe ou de Rôle l’élément Page « Liste » XxxxxxListe.jsp Point d'entrée Jsp page Liste contentXxxxxxListe.jsp Contenu Jsp page Liste


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur Classe java

ValidatedScreenBean

VsbXxxxxxListe

Classe java

ScreenBean

SbXxxxxxListe

Classe java

ActionCnaf

JSP JSP Classe java

Classe java

Classe java

Classe java Classe java

Framework EDC

Page :36 28/02/08

Bean des données fonctionnelles de la page Liste en format interne Bean des données fonctionnelles de la page Liste en format externe Classe Action de la page Liste

ActionXxxxxxListe Page « Detail » XxxxxxDetail.jsp Point d'entrée Jsp page Detail contentXxxxxxDetail.jsp Contenu Jsp page Detail ValidatedScreenBean VsbXxxxxxDetail Bean des données fonctionnelles de la page Detail en format interne ScreenBean SbXxxxxxDetail Bean des données fonctionnelles de la page Detail en format externe ActionCnaf ActionXxxxxxDetail Classe Action de la page Detail Acte GestionDonnees GdXxxxxx Classe de gestion des données de l’acte Xxxxxx ControleurCinematique CcXxxxxx Classe de gestion de la cinématique de l’acte Xxxxxx


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

4.

Framework EDC

Page :37 28/02/08

Paramétrage 4.1. Le fichier web.xml

Dans le fichier web.xml, on trouve la déclaration de la servlet de struts (ActionServlet) à déclarer comme ci-dessous. On trouve aussi la déclaration de la servlet de startup du framework Cnaf ; il faut lui spécifier les paramètres suivants : ♦ Le paramètre config doit pointer sur le cnaf-config.xml (chemin relatif au war). ♦ Le paramètre subParmPath doit pointer sur un répertoire dédié à la webApplication (chemin relatif à la property système ParmPath). Chaque application devra pointer sur son propre répertoire. ♦ Le paramètre ParametresExternes doit pointer sur le fichier de properties externe accessible dans l'application via mgt.getWarProperty(...) (chemin relatif au paramètre subParmPath ). ♦ Le paramètre PDCTablesDeCodes doit pointer sur le fichier de properties externe qui liste l'ensemble des fichiers tables de codes à charger (chemin relatif au paramètre subParmPath) voir documentation "Tables de codes.doc" dans le répertoire documentation de la release. ♦ Le paramètre CustomTBCLoader (optionel) doit pointer sur une classe de chargement de tables de codes spécifiques à votre application (chemin relatif au war) voir documentation "Tables de codes.doc" dans le répertoire documentation de la release. ♦ Le paramètre DataEnumerationFile (optionel) doit pointer sur le fichier xml des énumérations nommées à charger (chemin relatif au war) voir documentation "Liste de valeurs.doc" dans le répertoire documentation de la release.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <display-name>TP</display-name> <filter> <filter-name>Controleur surete WEB</filter-name> <filter-class>cnaf.framework.surete.web.ControleurSurete</filterclass> </filter> <!--Définition de la ressource à intercepter --> <filter-mapping> <filter-name>Controleur surete WEB</filter-name> <url-pattern>/*.do</url-pattern> </filter-mapping>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :38 28/02/08

<!-- Action Servlet Configuration (servlet struts)--> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>ApplicationResources</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>validate</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>1</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>startup</servlet-name> <servlet-class>cnaf.framework.runtime.startup.StartupServlet</servlet-class> <!-- le parametre "config" doit pointer sur le cnaf-config.xml (chemin relatif au war) --> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/cnaf-config.xml</param-value> </init-param> <!-- le parametre "subParmPath" pointe sur le repertoire à la racine parmPath contenant tous les fichiers de configuration de l’application --> <init-param> <param-name>subParmPath</param-name> <param-value>/ApplicationExemple</param-value> </init-param>

du

<!-- le parametre "ParametresExternes" doit pointer sur le fichier properties externe accessible dans l'application via mgt.getWarProperty(...) (chemin relatif à la property système "ParmPath") --> <init-param> <param-name>ParametresExternes</param-name> <param-value>/appli.properties</param-value> </init-param>

de

<!-- le parametre "PDCTablesDeCodes" doit pointer sur le fichier de properties externe qui liste l'ensemble des fichiers tables de codes à charger (chemin relatif à la property système "ParmPath") --> <init-param> <param-name>PDCTablesDeCodes</param-name> <param-value>/PDCTablesDeCodes.properties</param-value> </init-param> <!-- le parametre "CustomTBCLoader" (optionel) doit pointer sur une classe


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :39 28/02/08

de chargement de tables de codes spécifiques à votre application (chemin relatif au war) --> <init-param> <param-name>CustomTBCLoader</param-name> <param-value>sdp.tablesdecodes.TBCLoader</param-value> </init-param> <!-- le parametre "DataEnumerationFile" (optionel) doit pointer sur le fichier xml des énumérations nommées à charger (chemin relatif au war) --> <init-param> <param-name>DataEnumerationFile</param-name> <param-value>/WEB-INF/enum.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- The Welcome File List --> <welcome-file-list> <welcome-file>Accueil.jsp</welcome-file> </welcome-file-list> <!-- Application Tag Library Descriptor --> <!-- Struts Tag Library Descriptors --> <taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/config/tlds/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/config/tlds/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/config/tlds/struts-logic.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri> <taglib-location>/config/tlds/struts-template.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri> <taglib-location>/config/tlds/struts-nested.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/cnaf.tld</taglib-uri> <taglib-location>/config/tlds/cnaf.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/cnaf-iw.tld</taglib-uri> <taglib-location>/config/tlds/cnaf-iw.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-layout.tld</taglib-uri> <taglib-location>/config/tlds/struts-layout.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :40 28/02/08

<taglib-location>/config/tlds/struts-tiles.tld</taglib-location> </taglib> </web-app>

4.2. Le fichier cnaf-config.xml Le fichier cnaf-config.xml est le fichier de configuration du framework cnaf. Un schema XML décrit la structure de ce fichier de configuration:

Ce schéma est présent dans l’infrastructure envnims (envnims/ifw/webapp/WebContent/config/schemas) est doit être inclus dans le packaging de la webApp. Au lancement de la webApp, la validité du fichier à ce schéma est contrôlée. Le fichier cnaf-config.xml décrit les fonctions et les actes de l’application. Pour ces fonctions et ces actes sont décrits notamment les boutons ou les liens qui y sont associés Pour les fonctions, on définit les boutons ou les liens associés et valables pour toutes les pages de la fonction. Pour les actes, on définit la classe de GestionDonnees et la classe de ControleurCinematique correspondantes. On définit aussi les boutons ou les liens associés et valables pour toutes les pages de l’acte.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :41 28/02/08

Pour les actions, lorsqu’on veut synchroniser deux frames (voir § Soumission du formulaire principal par un formulaire détail inclus dans une IFRAME du Guide Java des composants graphiques) on aura besoin de définir pour les actions, le type de gestion du Vsb par le framework : saveVsb= »false » (le défaut c’est « true »). Exemple : <?xml version="1.0" encoding="ISO-8859-1" ?> <!-This is the cnaf configuration file --> <cnaf-config> <fonction nom="MaFonction" mappingSurete="true"> <flux-de-donnees id="TestInfraInj" schema="/Daq/TestInfraSchema.xsd" description="Flux pour test infra"/> <bouton

id="Abd" libelle="Abandon" type="cnaf.framework.configuration.BoutonLien" acte="Acte1" action="CarlogSelect"/>

<bouton

id="Valider" libelle="Valider" format="bouton" type="cnaf.framework.configuration.BoutonSubmit"/>

<msgGlobaux>glob</msgGlobaux> <fonctionBase nom="CRISTAL.Consultation.consulter"/> <fonctionBase nom="CRISTAL.Tiersdemande.Tiersdemande"/> </fonction> <acq-mappings> <acq-mapping

idTag="Acte1" acte="Acte1" acqClass="cnaf.cristal.majsituation.injection.BgActe1" mapping="/Daq/TestInfraMapping.xml" />

</acq-mappings> <acte

nom="Acte1" mappingSurete="true" gdClass="cnaf.cristal.majsituation.web.tpframeworkcnaf.GdActe1" ccClass="cnaf.cristal.majsituation.web.tpframeworkcnaf.CcActe1"> <msgLocaux>loc</msgLocaux> <fonctionBase nom="CRISTAL.Consultation.consulter"/> </acte> <suretes> < surete id="test"> <fonctionBase nom="CRISTAL.Liquidation.Liquider"/> </ surete> </suretes>

<actions> <action path="/Detail" saveVsb="false"/> </actions> </cnaf-config>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :42 28/02/08

La déclaration des boutons est indispensable pour les boutons de type "BoutonLien". Elle est optionnelle pour les boutons de type "BoutonSubmit". On peut définir deux types de boutons:

4.2.a. Boutons de soumission du formulaire. Ces boutons permettent de soumettre le formulaire. <bouton id="id_Abandon_Liquid" libelle="Abandon Liquid" type="cnaf.framework.configuration.BoutonSubmit"/>

Les méthodes verifier et performCnaf de la classe Action qui correspond à la page affichée sont activée. Dans ces méthodes, on peut tester quel bouton a été cliqué grâce à la séquence : mgt.getRequestParameter("btnAction"); La déclaration des boutons de type soumission est optionnelle. 4.2.b. Bouton Liens Ce type de bouton permet d’enchaîner directement vers une action de la fonction (du même acte ou d’un autre acte) sans exécution des méthodes verifier/performCnaf et determinerActionSuivante de l’action qui correspond au formulaire en cours d’affichage. Ce type de bouton n’exécute pas non plus la validation formelle du formulaire. Il est indiqué pour tous les boutons d’abandon. <bouton id="id_abd" libelle="Abandon" type="cnaf.framework.configuration.BoutonLien" acte="Adr" action="AdrSelect"/>

La déclaration des boutons de type Lien est obligatoire. Remarque : si un lien renvoie vers une action appartenant à un acte différent de celui en cours d’exécution : 1. L’acte destinataire doit être actif au moment de l’activation du lien 2. L’acte courant et tous les actes englobant jusqu’à l’acte cible seront terminés. Exemple : sur la page du détail de Quiloy, dans le cadre d’un FGG (liquidation et Demal sont donc actifs), on clicke sur un lien qui renvoie vers l’action LiqAccueil de la liquidation : dans ce cas, les actes Quiloy et Demal seront abandonnés.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :43 28/02/08

4.2.c. Mapping sûreté Le framework peut optionnellement prendre en charge le contrôle des habilitations. Ce contrôle des habilitation peut se faire au choix à l'activation de la fonction et/ou à l'activation de chaque acte. Au cas où l'utilisateur n'est pas habilité, le framework lève une Exception FrmkCnaf_08. a) Contrôle au niveau "fonction" Pour que le framework prenne en charge le contrôle des habilitations au niveau de la fonction (au démarrage) il faut spécifier: <fonction

nom="MaFonction" mappingSurete="true">

et <fonctionBase nom="CRISTAL.Consultation.consulter"/>

Le framework s'adressera à la sûreté pour lui demander si l'utilisateur est habilité à exécuter la "fonction de base" indiquée dans le tag fonctionBase inclus dans le tag <fonction> Il est possible de spécifier plusieurs fonctions de base. Dans ce cas, l'utilisateur doit être habilité à au moins une de ces fonctions de base. b) Contrôle au niveau acte Pour que le framework prenne en charge le contrôle des habilitations au niveau de l'activation d'un acte il faut spécifier: <acte

nom="Acte1" mappingSurete="true"

et <fonctionBase nom=" CRISTAL.Tiersdemande.Tiersdemande"/>

Le framework s'adressera à la sûreté pour lui demander si l'utilisateur est habilité à exécuter la "fonction de base" indiquée dans le tag fonctionBase inclus dans le tag <acte> Il est possible de spécifier plusieurs fonctions de base. Dans ce cas, l'utilisateur doit être habilité à au moins une de ces fonctions de base. c) Contrôle au niveau présentation d’une page Le framework peut soumettre à la sûreté, des blocs à l’intérieur des JSP à la condition que ces blocs soient délimités par un tag <cnaf:surete property="identifiant"> …</cnaf:surete> L’identifiant cité dans l’attribut property doit être défini dans le fichier de configuration dans le tag englobant <suretes>. On peut définir 1 à n tag <surete> dans le tag <suretes> et pour chaque tag <surete> on peut avoir 1 à n tag <fonctionBase> : <suretes> <surete id="identifiant"> <fonctionBase nom="CRISTAL.Liquidation.Liquider"/> </surete> </suretes>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :44 28/02/08

4.3. Le fichier struts-config.xml Le fichier struts-config.xml est le fichier de configuration du framework struts (framework sous-jacent du framework cnaf). Certaines règles doivent être respectées pour le bon fonctionnement du système.

4.3.a. form-beans Les Sb du framework Cnaf spécialisent les form-bean de Struts. Les ScreenBean doivent donc être définis dans le tag <form-beans>. A un nom logique de ScreanBean (name) on associe la classe du ScreanBean (type). <form-beans> <form-bean

name="SbAdrDetail" type="appli.acte1.SbAdrDetail"/>

</form-bean/>

4.3.b. forward et global forwards Les tags foward spécifient les branchements de page en page. Ils doivent toujours pointer sur des actions pour que la méthode prépare soit exécutée avant le branchement vers la jsp correspondant à la page. Les tags définis à l’intérieur du tag global-forwards fonctionnent comme ceux inclus dans les tag action sauf qu’ils sont activables depuis n’importe quelle page alors que les tag forward définis dans les actions ne sont activables que depuis l’action où ils sont définis. Dans le global-forward il faut définir l’ensemble des forward possibles depuis plusieurs actions ; par exemple :  Le point d’entrée dans les actes: le path doit pointer vers l’action point d’entrée unique de l’acte métier.  Un forward défini dans un bouton Lien (voir paragraphe sur la déclaration des boutons) qui peut être actif sur plusieurs pages <forward <forward

name="Quiloy" path="/QuiloyPrompt.do"/> name="QuiloySynthese" path="/QuiloySynthese.do"/>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :45 28/02/08

4.3.c. action Le tag action-mappings inclus tous les tag action. Chaque tag action spécifie à Struts quelle « portion de code » activer sur une requête http. Les portions de code sont définies par les classes ActionCnaf. Une action peut être aveugle ; dans ce cas elle ne comporte pas l’attribut name, ni input ni scope qui, par contre, sont utilisés pour définir une action à laquelle est associée une page :  type : identifie la sous-classe d’ActionCnaf qui sera activée sur la requête  name : identifie le form-bean associé à la page  scope : indique le scope du screen bean (request dans notre cas)  input : identifie la page jsp associée à l’action –  validate : indique à struts qu’il doit activer la mécanique de gestion des erreurs  parameter : porte le nom de l’acte auquel appartient l’action. C’est ce nom d’acte qui permet de faire le lien avec le fichier cnaf-config.xml.  les tag <forward> inclus dans les tag <action> identifient les débranchements possibles de cette action vers d’autres actions Ils doivent toujours pointer sur des actions (path=‘/Xxxxxx.do’) pour que la méthode prépare soit exécutée avant le branchement vers la jsp correspondant à la page. Exemple : <action-mappings> <action path="/ActionLiqEntry" type="appli.acte1.ActionActe1Debut" parameter="Acte1"> <forward name="LiqAccueil" path="/LiqAccueil.do"/> </action> <action path="/LiqAccueil" type="cnaf.cristal.majsituation.liquidation.web.ActionLiqAccueil" name="SbLiqAccueil" scope="request" validate="true" input="/LiqAccueil.jsp" parameter="Acte1"> <forward name="Synthese" path="/Synthese.do"/> <forward name="LiqListFg" path="/LiqListFg.do"/> </action> </action-mappings>

Attention : Pour les besoins du framework Cnaf, si des BoutonsLien sont définis dans le fichier cnafconfig.xml, l’action suivante doit être inclus dans le fichier struts-config.xml : <action

path="/ActionBouton" type="cnaf.framework.runtime.ActionBouton" parameter="Framework"> </action>

Attention : Pour déclarer une action AJAX, l’attribut input ne doit pas être renseigné. <action

</action>

path="/AjaxChamps" type="cnaf.exemples2.ajax.ActionAjaxChamps" name="SbChamps" scope="request" validate="true" parameter="Acte">


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :46 28/02/08

4.3.d. Message Ressources Le tag message-resources permet d’attribuer une clé à un fichier de message d’erreur défini par l’attribut parameter. Cette clé est réutilisée dans certains actes ou fonctions décrit dans le fichier cnaf-config.xml. L’attribut parameter doit comporter le chemin complet du fichier en remplaçant les / par des .. Dans notre exemple on considère que tous les fichiers se trouvent sous le répertoire appli se trouvant lui même à la racine du projet. <!-- ========== Message Resources Definitions ============================ --> <message-resources parameter="ApplicationResources"/> <message-resources key="msgGlobauxKey" parameter="appli.msgGlobauxRessources"/> <message-resources key="msgLocauxKey1" parameter="appli.msgLocauxFGE1"/> <message-resources key="msgLocauxKey2" parameter="appli.msgLocauxFGE2"/> <message-resources key="msgLocauxKey3" parameter="appli.msgLocauxFGE3"/> <message-resources key="msgLocauxKey4" parameter="appli.msgLocauxFGE4"/> ...

4.3.e. Plugin Tiles Si vous utilisez les Tiles dans votre application, vous devrez déclarer dans le fichier strutsconfig la localisation de vos fichiers de définition. Voir la documentation "Cadre de presentation.doc" pour plus d'information sur les tiles. <plug-in className="org.apache.struts.tiles.TilesPlugin" > <set-property property="definitions-config" value="/tiles/def/tilesdefs.xml,/commons/specific-tiles-defs.xml" /> <set-property property="definitions-parser-validate" value="true" /> <set-property property="moduleAware" value="true" /> </plug-in>


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

5.

Framework EDC

Page :47 28/02/08

Annexe 5.1. Les exceptions FrameworkCnafException

Une Classe d’exception (FrameworkCnafException) a été créée pour remonter toutes les exceptions capturées par le Framework. Les différents cas d'exceptions représentés par cette classe sont différenciés par l'identifiant d'exception (id). Dans la page d’exception, il y a une partie Conseil et infoComplementaire qui donnent des informations sur le contexte de l’exception. Suivant la nature de l’exception, la FrameworkCnafException donnera aussi la fonction courante, l’acte courant, le contexte métier, le contrôleur de cinématique ainsi que la Gestion de Données. Le tableau ci-après indique pour chaque identifiant de FrameworkCnafException la cause et l'action corrective.


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

id FrmkCnaf_01

FrmkCnaf_02

FrmkCnaf_04

FrmkCnaf_05

FrmkCnaf_06

FrmkCnaf_07

FrmkCnaf_08

Framework EDC

Cause Il ne s'agit pas d'une erreur de l'architecture d'exécution FrameworkCnaf: votre application a lancé une exception qui dérive de CnafException Au niveau le plus haut, l'architecture d'exécution du Framework Cnaf a récupéré une Exception qui peut provenir de l'application ou des couches basses de l'architecture d'exécution du Framework Cnaf L'attribut "parameter" du tag <action> du fichier struts-config n'est pas valorisé

Page :48 28/02/08

Action corrective Traiter la "root exception" représentée par la l'exception (dérivée de CnafException) lancée par votre application. Déterminer l'origine de l'exception grâce au "stack trace" de l'exception racine; corriger si votre application est à l'origine de cette exception, soumettre le problème au support EDC si l'infrastructure est à l'origine de l'exception. Corriger le fichier struts-config.xml pour associer (à travers l'attribut "parameter") chaque classe action à un acte défini dans le fichier cnafconfig.xml Demande d'initialisation d'une fonction, sans que Vérifier votre fichier web.xml: le filtre de sureté l'interface de sûreté ne soit présente en session n'est pas présent ou n'est pas activé ou l’infrastructure de sûreté n’est pas bien installée. Demande d'initialisation d'une fonction non définie Modifier la requête HTTP qui lance votre dans le fichier Ccnaf-config.xml application pour spécifier un nom de fonction existant ou définir la fonction dans le fichier cnafconfig.xml SubContextId inconnu dans le contexte (erreur de Le paramètre de request "subContextId" a une communication avec l'infrastructure IW) valeur qui n'est pas connu du framework. Votre session a peut-être expirée ou votre formulaire n'est pas un "cnaf:form". Erreur de sûreté; l'utilisateur n'est pas habilité à En test unitaire, examiner le référentiel sureté exécuter la fonction demandée unitaire: %ParmPath%/ surete/referentiel. En production, voir avec l'administrateur sûreté


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

id FrmkCnaf_09

FrmkCnaf_10 FrmkCnaf_11

FrmkCnaf_12

FrmkCnaf_13

FrmkCnaf_14

FrmkCnaf_15 FrmkCnaf_16 FrmkCnaf_17

Framework EDC

Cause L’acte (spécifié par l'attribut "parameter" de l'action courante dans la fichier struts-config.xml) n’est pas défini dans le fichier cnaf_config.xml L'acte cible référencé par le BoutonLien activé n'est pas actif dans le contexte Le controleur de cinématique de l'acte de plus bas niveau dans la pile des actes répond "null"

Page :49 28/02/08

Action corrective Corriger le fichier struts-config.xml ou ajouter la définition de l'acte dans le fichier cnaf-config.xml.

Corriger la cinématique d'exécution ou désactiver le BoutonLien responsable. Corriger l'application pour que l'acte de plus bas niveau dans la pile prennent une décision d'enchaînement: la logique de cinématique de l'application ne peut pas dépiler tous les actes. Au traitement d'une requête IW, Le paramètre S'il s'agit de la 1ere activation, la page d'accueil subContextId n'est pas dans la request doit inclure le paramètre subContextId. Si l'erreur se produit sur la soumission d'un formulaire, vérifier que le formulaire est bien un "cnaf:form". Si l'erreur se produit après le click sur un lien, vérifier que le lien est bien généré avec un "cnaf:link" Demande d'initialisation d'une fonction, sans le Ajouter le paramètre "codefonction" et/ou le request parameter "codefonction" ou "codeactivite" paramètre "codeactivite" à la requête HTTP qui lance votre application (page d'accueil) L’instanciation d’un singleton a échoué Vérifier que la classe est présente dans le classPath du serveur et que la méthode getInstance() est bien définie. L’instanciation d’une classe a échoué Vérifier que la classe est présente dans le classPath du serveur. Erreur avec le Parser DOM dans une phase Il faut vérifier la construction du Flux XML et le d'acquisition de données Schéma XML La classe du Bean de Mapping n’a pas été Vérifier le contenu de cnaf-config.xml renseignée


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

id FrmkCnaf_18

Cause Erreur à l'instanciation du "Sender" IW

FrmkCnaf_19 FrmkCnaf_20

Erreur à la terminaison d'une fonction La suppression par une classe action de l'acte qui lui est associé est impossible Demande d'initialisation d’un sous-contexte déjà existant. Le subContextId passé en paramètre existe déjà dans la session

FrmkCnaf_21

Valid_01

Erreur au chargement donnée dictionnaire

Valid_02

Erreur au contrôle de validation sur table de codes

Page :50 28/02/08 Action corrective Vérifier la configuration Jonas et notamment la déclaration de la file de message nécessaire à IW Contacter la hotline EDC Corriger l'application Si le lancement de la fonction est effectué à partir de IW, il y a une incohérence : IW demande l’activation simultanée du même subContextId. Si le lancement de la fonction est effectué à partir d’une page d’accueil de test, on peut corriger en ajoutant le paramètre d’activation frmkAccueilTest Vérifier l’existence de la donnée dans le fichier runtime du dictionnaire (sous WEB-INF/data) La donnée citée référence une table de codes qui n’existe pas dans le fichier des tables de codes de l’application. Corriger l’incohérence.

5.2. La page d'exception Les exceptions sont présentées (en phase de développement) de la façon suivante:


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

Framework EDC

Page :51 28/02/08 Type d'exception Identifiant l'exception

3

de

Données spécifiques à la FrameworkCnafException

Données génériques héritées de la CnafException

2 Donnée spécifique à l'exception CMP_01

1

Erreur initiale (racine)


Groupe Edition des composants Manuel Framework Cnaf version 3.1 utilisateur

1

2

3

Framework EDC

Page :52 28/02/08

Le code applicatif à généré une exception "NullPointerException" qui a été capturée ("catché") par une couche applicative. Cette couche applicative a défini son contexte dans une exception de type AppMetierException de type "MET_01" (avec l'attribut mvar2 comme attribut spécifique).

La couche composant de l'application a capturé l'exception "AppComposantException". Cette couche applicative a défini son contexte dans une exception de type AppComposantException de type "CMP_01" (avec l'attribut mvar comme attribut spécifique).

Le framework Cnaf a capturé l'exception "AppComposantException". Le framework Cnaf définit son contexte dans une exception de type FrameworkCnafException de type "FrmkCnaf_01"

Framework Cnaf  

La doc de réF.E.R.ence

Read more
Read more
Similar to
Popular now
Just for you