PROBLÈME IDENTIFIÉ:
- Les composants action-button-* et button-form-submit utilisaient ui:define pour passer action
- JSF ne peut pas évaluer ui:define comme une expression de méthode
- Erreur: 'Identity [action] does not reference a method expression instance, returned type [java.lang.String]'
SOLUTION APPLIQUÉE:
- Suppression de action-button-edit.xhtml, action-button-toggle.xhtml, action-button-delete.xhtml, button-form-submit.xhtml
- Retour aux p:commandButton directs dans liste.xhtml et nouvelle.xhtml
- Ajout de ui-button-text pour le style Rounded Text (icône + texte)
- Largeur colonne Actions augmentée : 280px → 320px
COMPOSANTS DRY/WOU CONSERVÉS (qui fonctionnent):
- button-success.xhtml, button-secondary.xhtml : navigation avec outcome
- button-primary.xhtml, button-warning.xhtml, button-info.xhtml, button-icon.xhtml : actions simples
- Tous les composants cards, forms, layout, tables, dialogs
CONCLUSION:
Pour les actions avec paramètres dans DataTables, p:commandButton direct est la seule solution viable en JSF.
- Retrait de actionListener dans button-primary.xhtml
- Retrait de actionListener dans button-icon.xhtml
- Retrait de actionListener dans button-warning.xhtml
- Retrait de actionListener dans button-info.xhtml
- Correction des expressions styleClass pour eviter les erreurs EL
Ces composants utilisent maintenant uniquement action ou onclick.
Pour les actions dans DataTables, utiliser action-button-* ou p:commandButton direct.
Resout l erreur Identity actionListener was null and was unable to invoke
- Ajout de l'attribut value (texte) à tous les boutons d'action
- Ajout de la classe ui-button-text pour le style Rounded Text de PrimeFaces
- Boutons mis à jour :
* action-button-view : 'Consulter' + icône search
* action-button-edit : 'Modifier' + icône pencil
* action-button-toggle : 'Activer/Désactiver' + icône check/ban
* action-button-delete : 'Supprimer' + icône trash
- Application dans liste.xhtml des organisations avec les composants DRY/WOU
- Largeur de la colonne Actions augmentée : 220px → 280px
Style Rounded Text = Boutons arrondis avec icône ET texte pour meilleure UX
- cotisationStatut : 'À jour' → 'N/A' (en attente intégration module Cotisations)
- cotisationColor : 'text-green-500' → 'text-500' (gris neutre)
- dernierPaiement : 'Nov 2025' → 'N/A'
- tauxParticipation : '75' → '0'
- evenementsAnnee : '12' → '0'
Plus de données fictives dans le système !
Les vraies données seront affichées une fois les modules Cotisations et Événements intégrés.
Respecte le principe : 'Je ne veux aucune données fictives dans le système.
Tout doit pouvoir être CRUD réellement.'
- numeroMembre : Marqué AUTO-GÉNÉRÉ, ne pas afficher dans formulaire création
- dateNaissance : Marquée AUTO-GÉNÉRÉE à il y a 18 ans si non fournie
- dateAdhesion : Marquée AUTO-GÉNÉRÉE à LocalDate.now() si non fournie
Documentation claire pour les développeurs frontend :
- Champs OBLIGATOIRES : nom, prénom, email, statut, associationId
- Champs OPTIONNELS : tous les autres
- Champs AUTO-GÉNÉRÉS : à ne pas afficher dans les formulaires de création
Cette documentation guide la création des formulaires pour ne demander
que les informations essentielles à l'utilisateur.
- Ajout des champs : membreBureau, responsable, dateAdhesion, region, ville, quartier, role
- Ajout des propriétés dérivées :
* typeMembre, typeSeverity, typeIcon : basés sur responsable/membreBureau
* statutIcon : icône selon le statut
* entite : nom de l'association
* anciennete : calcul depuis dateInscription
* cotisationStatut, cotisationColor, dernierPaiement : valeurs par défaut (TODO)
* tauxParticipation, evenementsAnnee : valeurs par défaut (TODO)
- Résout PropertyNotFoundException pour typeSeverity et autres propriétés
- Les propriétés de cotisation et participation sont des placeholders à remplacer par vraies données
- Recréation de action-button-edit.xhtml avec ui:define pour l'action
- Recréation de action-button-toggle.xhtml avec ui:define pour l'action
- Recréation de action-button-delete.xhtml avec ui:define pour l'action
- Recréation de action-button-view.xhtml (navigation simple)
Ces composants utilisent maintenant ui:decorate + ui:define au lieu de ui:param
pour passer les expressions de méthode actionListener.
Usage exemple:
ui:decorate template action-button-edit.xhtml
ui:param name update value formEdit
ui:param name dialogWidget value dlgEdit
ui:define name action
bean.editMethod(item)
ui:define
ui:decorate
- Suppression de action-button-edit.xhtml
- Suppression de action-button-toggle.xhtml
- Suppression de action-button-delete.xhtml
- Suppression de action-button-view.xhtml
Ces composants tentaient de passer actionListener via ui:param ce qui ne fonctionne pas en JSF.
Les pages utilisent maintenant directement p:commandButton pour les actions avec méthodes backend.
Composants conservés pour DRY/WOU :
- button-success.xhtml, button-secondary.xhtml : pour navigation (outcome)
- button-form-submit.xhtml : pour actions backend (via ui:define)
- Tous les composants cards, forms, layout, tables, dialogs
- Ajout de la méthode getInitiales() qui retourne les initiales du membre
- Calcule les initiales à partir du prénom et du nom (première lettre de chaque)
- Retourne les initiales en majuscules
- Résout l'erreur PropertyNotFoundException pour la propriété initiales
- Ajout du champ photoUrl avec @Size(max=255) pour aligner avec le DTO serveur
- Ajout des getters et setters correspondants
- Résout l'erreur PropertyNotFoundException lors de l'affichage des membres
- Mise à jour automatique de 60+ fichiers avec les nouveaux chemins
- Correction des références vers :
* /templates/components/buttons/ (button-*, action-button-*)
* /templates/components/forms/ (form-field-*, form-section, form-field-wrapper, detail-field)
* /templates/components/cards/ (card-*, filter-bar)
* /templates/components/columns/ (column-*)
* /templates/components/dialogs/ (confirm-dialog, form-dialog)
* /templates/components/tables/ (data-table)
- Fichiers mis à jour : pages (adhesion, admin, aide, cotisation, evenement, membre, organisation, personnel, rapport)
- Fichiers mis à jour : composants (auto-références dans la documentation)
- Toutes les pages de l'application utilisent maintenant les bons chemins
- Nouveau composant button-form-submit.xhtml pour les boutons de soumission de formulaire
- Utilise ui:decorate avec ui:define pour passer l'expression de méthode action
- Supporte tous les attributs PrimeFaces : update, process, oncomplete, validateClient
- Paramètre severity pour les différents styles (success, secondary, warning, danger)
- Application dans nouvelle.xhtml et liste.xhtml (dialogue de modification)
- Respecte les conventions PrimeFaces et évite les erreurs EL
Cette approche permet de réutiliser le composant tout en passant correctement
les expressions de méthode via ui:define au lieu de ui:param.
- Ajout de commentaires dans nouvelle.xhtml pour expliquer pourquoi certains boutons
sont en p:commandButton direct (action avec méthode backend)
- Les boutons de navigation utilisent les composants réutilisables (DRY/WOU)
- Les boutons d'action backend restent en p:commandButton car l'attribut action
ne peut pas être passé via ui:param en JSF
- Mise à jour des références vers /templates/components/buttons/button-secondary.xhtml
- Maintien de l'approche DRY/WOU avec les composants réutilisables
- Note: Le bouton Créer reste en p:commandButton direct car il utilise action avec méthode backend
- Réorganisation de la structure des composants dans des sous-dossiers :
* buttons/ : tous les composants de boutons
* cards/ : card-header, card-simple, filter-bar, stat-card
* columns/ : composants de colonnes pour datatables
* dialogs/ : confirm-dialog, form-dialog
* forms/ : tous les composants de formulaires
* layout/ : menu, topbar, footer, config, rightpanel, page-header, organisation-logo
* tables/ : data-table
- Correction des erreurs EL dans les composants :
* Suppression des expressions EL dans les commentaires XML
* Protection des paramètres optionnels (styleClass) avec 'not empty'
* Simplification de confirm-dialog avec valeurs fixes
* Correction de organisation-logo (rendered sur balise HTML)
- Ajout de nouvelles pages pour les organisations :
* detail.xhtml : consultation exhaustive d'une organisation
* nouvelle.xhtml : création complète d'une organisation
- Mise à jour de toutes les références vers les nouveaux chemins (37+ fichiers)
- Maintien de l'approche DRY/WOU avec composants réutilisables