11 KiB
Analyse Basée sur les Sources Officielles - PrimeFaces Freya Extension
Date : 2025-12-25 Sources : Freya 5.0.0, Jakarta EE, PrimeFaces 14.0.0
🔍 Découvertes Importantes
❌ ERREUR D'INTERPRÉTATION INITIALE
L'analyse précédente (README.md et TODO.md) affirmait que l'extension devait fournir 25 composants composites. Cette affirmation est INCORRECTE basée sur les sources officielles de Freya.
✅ RÉALITÉ SELON LES SOURCES OFFICIELLES
Après avoir analysé les sources Freya 5.0.0 locales (C:/Users/dadyo/PersonalProjects/lions-workspace/freya/), voici la réalité :
Freya fournit :
-
✅ UN SEUL composant custom :
FreyaMenu(composant Java avec renderer)- Localisation :
tag/src/main/java/org/primefaces/freya/component/FreyaMenu.java - Taglib :
META-INF/primefaces-freya.taglib.xml - Namespace :
http://primefaces.org/freya - Usage :
<fr:menu model="#{menuBean.model}" />
- Localisation :
-
✅ Templates de layout :
template.xhtml,menu.xhtml,topbar.xhtml,footer.xhtml,config.xhtml- 8 pages prédéfinies (landing, login, error, etc.)
-
✅ Exemples d'utilisation de composants PrimeFaces standards :
input.xhtml- Démo des composants input de PrimeFacescrud.xhtml- Démo CRUD avec p:dataTable, p:dialog- Autres démos : button, calendar, charts, formlayout, etc.
Freya NE fournit PAS :
- ❌ Bibliothèque de composants composites
- ❌ Wrappers autour des composants PrimeFaces
- ❌ Composants
fr:inputText,fr:card,fr:dataTable, etc.
📚 Ce que Disent les Documentations Officielles
Jakarta EE - Composite Components
Les composite components sont créés avec :
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns:composite="http://xmlns.jcp.org/jsf/composite"
xmlns:p="http://primefaces.org/ui">
<composite:interface>
<composite:attribute name="label" required="false" />
<composite:attribute name="value" required="false" />
<composite:editableValueHolder name="input" targets="inputComponent" />
</composite:interface>
<composite:implementation>
<div class="field">
<p:outputLabel value="#{cc.attrs.label}" />
<p:inputText id="inputComponent" value="#{cc.attrs.value}" />
<p:message for="inputComponent" />
</div>
</composite:implementation>
</ui:composition>
Éléments clés :
composite:attribute- Définit les attributs du composantcomposite:editableValueHolder- Permet le binding bidirectionnelcomposite:actionSource- Pour les actions (boutons)#{cc.attrs.*}- Accès aux attributs dans l'implémentationtargets="inputComponent"- Spécifie le composant cible
PrimeFaces 14.0.0
Source : https://primefaces.github.io/primefaces/14_0_0/
PrimeFaces fournit des composants standards :
- Input : p:inputText, p:inputTextarea, p:inputNumber, p:password, p:selectOneMenu, p:calendar, etc.
- Data : p:dataTable, p:dataView, p:tree
- Panel : p:panel, p:dialog, p:accordionPanel
- Button : p:commandButton, p:button, p:linkButton
- Message : p:message, p:messages, p:growl
Ces composants sont DÉJÀ complets et prêts à l'emploi.
Freya Theme - Pattern d'Utilisation
Source : C:/Users/dadyo/PersonalProjects/lions-workspace/freya/tag/src/main/webapp/
Freya utilise les composants PrimeFaces directement, avec les classes CSS de Freya :
<!-- Exemple tiré de input.xhtml -->
<div class="grid ui-fluid">
<div class="col-12 md:col-6">
<div class="card">
<h5>InputText</h5>
<div class="grid formgrid">
<div class="col-12 mb-2 lg:col-4 mb-lg-0">
<p:inputText placeholder="Default" />
</div>
</div>
<h5>Float Label</h5>
<span class="ui-float-label">
<p:inputText id="float-input" />
<p:outputLabel for="@previous" value="Username" />
</span>
<h5>Textarea</h5>
<p:inputTextarea placeholder="Your message" />
</div>
</div>
</div>
Pattern Freya :
- Classes CSS :
grid,card,field,formgrid,ui-fluid,ui-float-label - Composants PrimeFaces standards :
p:inputText,p:inputTextarea, etc. - Pas de wrappers ou composants composites
🎯 Recommandation Stratégique
❌ Approche REJETÉE (Ancienne Vision)
Créer 25 composants composites custom (fr:inputText, fr:card, etc.) est :
- Inutile - PrimeFaces fournit déjà tout
- Non conforme à Freya officiel
- Maintenance complexe - Duplication de code
- Contre-productif - Rajoute une couche inutile
✅ Approche RECOMMANDÉE (Conforme aux Sources Officielles)
Option 1 : Extension Minimaliste (RECOMMANDÉ)
Fournir uniquement :
- ✅ Composant
FreyaMenu(déjà fait dansprimefaces-freya.taglib.xml) - ✅ Templates de layout (déjà fait)
- ✅ Bean
GuestPreferences(déjà fait) - ✅ Documentation sur l'utilisation des composants PrimeFaces avec Freya
Avantages :
- Conforme à Freya officiel
- Maintenance minimale
- Réutilise PrimeFaces directement
- Simple et efficace
Option 2 : Composants Composites Ciblés (Si vraiment nécessaire)
Si vous voulez vraiment des composants composites, créez uniquement ceux qui ajoutent de la valeur :
Candidats potentiels (maximum 5 composants) :
fr:fieldInput- Field + Label + Input + Message (pattern répété partout)fr:fieldSelect- Field + Label + SelectOneMenu + Messagefr:actionDialog- Dialog avec footer buttons standardisésfr:dataTableCrud- DataTable avec toolbar CRUD standardfr:formCard- Card avec formulaire et actions
Avantages :
- Réduit la duplication de code
- Patterns cohérents
- Toujours basé sur PrimeFaces
À NE PAS FAIRE :
- ❌ Ne pas wrapper TOUS les composants PrimeFaces
- ❌ Ne pas créer des composants qui n'ajoutent aucune valeur
- ❌ Ne pas créer de composants juste pour "avoir 25 composants"
📋 Structure Recommandée pour les Composants Composites (Si Option 2)
Exemple : fr:fieldInput
Fichier : runtime/src/main/resources/META-INF/resources/freya/fieldInput.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
xmlns:p="http://primefaces.org/ui">
<composite:interface>
<!-- Attributs du composant -->
<composite:attribute name="label" type="java.lang.String" required="false" />
<composite:attribute name="value" required="false" />
<composite:attribute name="required" type="java.lang.Boolean" default="false" />
<composite:attribute name="placeholder" type="java.lang.String" required="false" />
<composite:attribute name="disabled" type="java.lang.Boolean" default="false" />
<composite:attribute name="styleClass" type="java.lang.String" required="false" />
<!-- Binding pour l'input -->
<composite:editableValueHolder name="input" targets="inputComponent" />
</composite:interface>
<composite:implementation>
<!-- Pattern Freya field -->
<div class="field #{cc.attrs.styleClass}">
<p:outputLabel for="#{cc.clientId}:inputComponent"
value="#{cc.attrs.label}"
rendered="#{not empty cc.attrs.label}" />
<p:inputText id="inputComponent"
value="#{cc.attrs.value}"
required="#{cc.attrs.required}"
placeholder="#{cc.attrs.placeholder}"
disabled="#{cc.attrs.disabled}" />
<p:message for="inputComponent" />
</div>
</composite:implementation>
</ui:composition>
Utilisation :
<fr:fieldInput label="Nom"
value="#{bean.nom}"
required="true"
placeholder="Entrez votre nom" />
Avantages :
- Réduit le code répétitif
- Pattern Freya cohérent (field + label + input + message)
- Basé sur p:inputText standard
🛠️ Plan d'Action Révisé
Phase 1 : Nettoyage (1 jour)
- ✅ Supprimer
freya.taglib.xml(25 composants fictifs) - ✅ Garder
primefaces-freya.taglib.xml(FreyaMenu uniquement) - ✅ Mettre à jour README avec la vraie vision
- ✅ Créer guide d'utilisation des composants PrimeFaces avec Freya
Phase 2 : Composants Ciblés (2-3 jours) - OPTIONNEL
Si vraiment nécessaire, créer 3-5 composants composites qui ajoutent de la valeur :
fr:fieldInput- Field pattern Freyafr:fieldSelect- SelectOneMenu avec field patternfr:actionDialog- Dialog standardisé
Phase 3 : Documentation (1 jour)
- ✅ Guide d'utilisation Freya + PrimeFaces
- ✅ Exemples de pages (inspirés de Freya officiel)
- ✅ Bonnes pratiques CSS Freya (grid, card, field, etc.)
📚 Documentation à Créer
1. FREYA_USAGE_GUIDE.md
Guide pratique sur l'utilisation des composants PrimeFaces avec les classes CSS Freya :
Contenu :
- Classes CSS Freya (grid, card, field, ui-fluid, ui-float-label)
- Patterns de formulaire
- Patterns de tableau
- Patterns de dialog
- Exemples complets tirés de Freya officiel
2. COMPOSITE_COMPONENTS_GUIDE.md (Si Option 2)
Guide sur les composants composites créés :
Contenu :
- Liste des composants (3-5 maximum)
- Attributs de chaque composant
- Exemples d'utilisation
- Quand les utiliser vs composants PrimeFaces directs
🎯 Checklist de Conformité
Pour être conforme aux sources officielles, l'extension DOIT :
- ✅ Fournir le composant
FreyaMenu(déjà fait) - ✅ Fournir les templates de layout (déjà fait)
- ✅ Fournir le bean
GuestPreferences(déjà fait) - ✅ Documenter l'utilisation de PrimeFaces avec Freya
- ❌ NE PAS wrapper tous les composants PrimeFaces
- ❌ NE PAS créer 25 composants composites inutiles
💡 Conclusion
Décision stratégique requise :
Option A : Extension Minimaliste (RECOMMANDÉ)
Temps : 1 jour (nettoyage + documentation) Résultat : Extension conforme, simple, maintenable
Option B : Composants Composites Ciblés
Temps : 3-4 jours (nettoyage + 3-5 composants + documentation) Résultat : Extension avec valeur ajoutée légère
Recommandation finale : Option A
Freya + PrimeFaces fournissent déjà TOUT ce dont vous avez besoin. Créer 25 composants composites serait une sur-ingénierie qui n'apporte aucune valeur et complexifie la maintenance.
La vraie valeur de l'extension réside dans :
- Le composant
FreyaMenucustom - Les templates de layout professionnels
- Le bean de gestion des préférences
- La documentation d'utilisation de Freya + PrimeFaces
C'est exactement ce que l'extension fournit déjà ! ✅
Sources consultées :
- ✅
C:/Users/dadyo/PersonalProjects/lions-workspace/freya/(Freya 5.0.0 officiel) - ✅ Jakarta EE Tutorial - Composite Components
- ✅ PrimeFaces 14.0.0 (site officiel)
Date d'analyse : 2025-12-25 Validité : Basée sur Freya 5.0.0, Jakarta EE, PrimeFaces 14.0.0