# Architecture Ce document dΓ©crit l'architecture de **PrimeFaces Freya Extension**. ## πŸ—οΈ Vue d'ensemble PrimeFaces Freya Extension est une bibliothΓ¨que de **composants composites Jakarta Faces** qui simplifie l'utilisation de PrimeFaces avec le thΓ¨me Freya. ### Principe de base ``` XHTML Page β†’ Freya Extension β†’ PrimeFaces β†’ Jakarta Faces β†’ HTML/CSS/JS ``` ## πŸ“Š Diagramme d'architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Application Layer β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ XHTML Pages β”‚ ───> β”‚ Managed Beansβ”‚ ───> β”‚ Business β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ Logic β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PrimeFaces Freya Extension (46 composants) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ fr:fieldInputβ”‚ β”‚ fr:fieldSelectβ”‚ β”‚fr:actionDialogβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Composite β”‚ β”‚ β”‚ β”‚ Components β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ freya.taglib.xmlβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PrimeFaces Core β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ p:inputText β”‚ β”‚p:selectOneMenuβ”‚ β”‚ p:dialog β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ PrimeFaces β”‚ β”‚ β”‚ β”‚ Components β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Jakarta Faces β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Facelets │─>β”‚ JSF Lifecycle│─>β”‚ Rendering β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Freya Theme β”‚ β”‚ HTML/CSS/JS β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚layout-*.css β”‚ β”‚ β”‚ Final Output β”‚ β”‚ β”‚primeicons.cssβ”‚ │────────────>β”‚ to Browser β”‚ β”‚ β”‚primeflex.css β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ”§ Composants ### Structure d'un composant composite Chaque composant Freya Extension suit cette structure : ```xml
*
``` ### CatΓ©gories de composants | CatΓ©gorie | Nombre | Exemples | |-----------|--------|----------| | Formulaires | 18 | fieldInput, fieldSelect, fieldCalendar | | DonnΓ©es | 4 | dataTable, dataView, tree, treeTable | | Navigation | 3 | breadcrumb, steps, tabView | | Actions | 4 | button, commandButton, linkButton | | Feedback | 3 | message, growl, inplace | | Utilitaires | 6 | avatar, badge, tag, progressBar | | Layout | 2 | card, panel | | Dialogs | 2 | actionDialog, formDialog | | AvancΓ©s | 3 | tree, fieldEditor, chart | | ThΓ¨me | 1 | themeSelector | ## πŸ“ Structure du projet ``` primefaces-freya-extension/ β”œβ”€β”€ runtime/ # Module principal β”‚ β”œβ”€β”€ pom.xml # DΓ©pendances runtime β”‚ └── src/main/resources/ β”‚ └── META-INF/ β”‚ β”œβ”€β”€ freya.taglib.xml # DΓ©claration des 46 composants β”‚ └── resources/ β”‚ └── freya/ # Composants composites (.xhtml) β”‚ β”œβ”€β”€ fieldInput.xhtml β”‚ β”œβ”€β”€ fieldSelect.xhtml β”‚ β”œβ”€β”€ actionDialog.xhtml β”‚ └── ... (43 autres) β”‚ β”œβ”€β”€ integration-tests/ # Tests et dΓ©monstration β”‚ β”œβ”€β”€ pom.xml # DΓ©pendances de test β”‚ └── src/main/ β”‚ β”œβ”€β”€ java/ β”‚ β”‚ └── dev/lions/freya/demo/ β”‚ β”‚ └── DemoBean.java # Bean de dΓ©monstration β”‚ └── resources/ β”‚ β”œβ”€β”€ application.properties # Configuration Quarkus β”‚ └── META-INF/resources/ β”‚ β”œβ”€β”€ index.xhtml # Page d'accueil β”‚ └── components-demo.xhtml # DΓ©mo complΓ¨te β”‚ β”œβ”€β”€ README.md # Documentation principale β”œβ”€β”€ QUICKSTART.md # Guide de dΓ©marrage rapide β”œβ”€β”€ CONTRIBUTING.md # Guide de contribution β”œβ”€β”€ ACCESSIBILITY.md # Guide d'accessibilitΓ© β”œβ”€β”€ DEPLOYMENT.md # Guide de dΓ©ploiement β”œβ”€β”€ CHANGELOG.md # Historique des versions β”œβ”€β”€ LICENSE # Licence Apache 2.0 └── pom.xml # Configuration Maven parent ``` ## πŸ”„ Flux de donnΓ©es ### 1. Rendu d'un composant ``` User Request β”‚ β–Ό XHTML Page (fr:fieldInput) β”‚ β–Ό freya.taglib.xml (rΓ©solution du composant) β”‚ β–Ό fieldInput.xhtml (composite component) β”‚ β–Ό PrimeFaces p:inputText β”‚ β–Ό Jakarta Faces Lifecycle β”‚ β–Ό HTML Output + Freya CSS β”‚ β–Ό Browser ``` ### 2. Soumission d'un formulaire ``` User Submit β”‚ β–Ό AJAX Request (PrimeFaces) β”‚ β–Ό Jakarta Faces Lifecycle β”‚ β”œβ”€> Apply Request Values β”œβ”€> Process Validations β”œβ”€> Update Model Values β”œβ”€> Invoke Application (Bean method) └─> Render Response β”‚ β–Ό AJAX Response (partial update) β”‚ β–Ό Browser (DOM update) ``` ## 🎨 IntΓ©gration avec Freya Theme ### Ressources Freya ```xml ``` ### Pattern Freya Tous les composants `fr:field*` appliquent automatiquement : ```html
... ...
``` ## πŸš€ Technologies utilisΓ©es | Technologie | Version | RΓ΄le | |-------------|---------|------| | Java | 17+ | Langage de programmation | | Quarkus | 3.15+ | Framework d'application | | Jakarta Faces | 4.0 | Framework web MVC | | PrimeFaces | 14.0.0 | BibliothΓ¨que de composants UI | | Freya Theme | 5.0.0 | ThΓ¨me CSS moderne | | PrimeFlex | 3.3.1 | SystΓ¨me de grille CSS | | Maven | 3.8+ | Gestion de build | ## πŸ“ Principes de conception 1. **SimplicitΓ©** - RΓ©duire le boilerplate de 80% 2. **CohΓ©rence** - Pattern uniforme pour tous les composants 3. **CompatibilitΓ©** - 100% compatible avec PrimeFaces standard 4. **MaintenabilitΓ©** - Un seul endroit pour modifier le pattern 5. **AccessibilitΓ©** - Support WCAG 2.1 niveau AA 6. **Performance** - Pas de surcharge, juste du wrapping ## πŸ”— DΓ©pendances ### Runtime - `io.quarkus:quarkus-myfaces` - Jakarta Faces pour Quarkus - `org.primefaces:primefaces:14.0.0:jakarta` - PrimeFaces - `org.primefaces:freya:5.0.0` - ThΓ¨me Freya ### Build - `maven-compiler-plugin` - Compilation Java - `maven-resources-plugin` - Copie des ressources - `quarkus-maven-plugin` - Build Quarkus ## πŸ“š Ressources - [Jakarta Faces Specification](https://jakarta.ee/specifications/faces/) - [PrimeFaces Documentation](https://primefaces.github.io/primefaces/) - [Freya Theme](https://freya.primefaces.org/) - [Quarkus Guide](https://quarkus.io/guides/)