# Guide d'Utilisation - Freya avec PrimeFaces
**Version** : Freya 5.0.0 + PrimeFaces 14.0.0
**Date** : 2025-12-25
**Sources** : Documentation officielle Freya et exemples
---
## 🎯 Introduction
Ce guide montre comment utiliser les composants **PrimeFaces standards** avec le thème **Freya** dans vos applications Quarkus, basé sur les exemples officiels de Freya 5.0.0.
**Important** : Freya est un **thème CSS** pour PrimeFaces, pas une bibliothèque de composants. Vous utilisez les composants PrimeFaces standards (`p:inputText`, `p:dataTable`, etc.) avec les classes CSS de Freya.
---
## 📦 Installation
### 1. Dépendances Maven
```xml
dev.lions
primefaces-freya-extension
1.0.0-SNAPSHOT
```
Cette extension fournit :
- ✅ Thème Freya
- ✅ Templates de layout
- ✅ Composant `FreyaMenu`
- ✅ Bean `GuestPreferences`
### 2. Configuration
**application.properties** :
```properties
primefaces.THEME=freya
primefaces.FONT_AWESOME=true
primefaces.CLIENT_SIDE_VALIDATION=true
primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
```
---
## 🎨 Classes CSS Freya
### Layout Classes (PrimeFlex)
Freya utilise **PrimeFlex** pour le layout :
```xml
```
**Classes principales** :
- `grid` - Conteneur grille
- `col-{n}` - Colonnes (1-12)
- `md:col-{n}`, `lg:col-{n}` - Breakpoints responsive
- `card` - Carte Freya avec ombre et border-radius
- `ui-fluid` - Inputs 100% width
### Form Classes
**Pattern Field** (recommandé) :
```xml
```
**Grid Formgrid** :
```xml
```
**Float Label** :
```xml
```
### Icons in Inputs
```xml
```
---
## 📝 Composants de Formulaire
### InputText
**Basique** :
```xml
```
**Avec field pattern** :
```xml
```
**Disabled / Erreur** :
```xml
```
### InputTextarea
```xml
```
### SelectOneMenu (Dropdown)
```xml
```
**Avec filtre** :
```xml
```
### Calendar (DatePicker)
```xml
```
### SelectManyCheckbox
```xml
```
### SelectOneRadio
```xml
```
---
## 📊 Composants de Données
### DataTable
**Basique** :
```xml
```
**Complet (Pattern Freya CRUD)** :
```xml
```
---
## 🗂️ Composants Panel
### Dialog
**Basique** :
```xml
```
**Avec formulaire et footer** :
```xml
```
### Panel
```xml
Contenu du panel...
```
### AccordionPanel
```xml
Contenu de la section 1...
Contenu de la section 2...
```
---
## 🔘 Composants Button
### CommandButton
**Basique** :
```xml
```
**Avec icône** :
```xml
```
**Avec styles Freya** :
```xml
```
**Groupe de boutons** :
```xml
```
---
## 💬 Composants Message
### Message (pour un champ)
```xml
```
### Messages (tous les messages)
```xml
```
### Growl (notifications toast)
```xml
```
**Dans le bean** :
```java
public void save() {
// Logic...
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,
"Succès",
"Données sauvegardées avec succès"));
}
```
---
## 📐 Patterns de Layout
### Page Complète avec Card
```xml
Ma Page
```
### Deux Colonnes
```xml
```
### Formulaire Complet
```xml
```
---
## 🎨 Composant FreyaMenu
**Usage** :
```xml
```
**Bean** :
```java
@Named
@SessionScoped
public class MenuBean implements Serializable {
private MenuModel model;
@PostConstruct
public void init() {
model = new DefaultMenuModel();
DefaultMenuItem item1 = DefaultMenuItem.builder()
.value("Dashboard")
.icon("pi pi-home")
.outcome("/dashboard.xhtml")
.build();
model.getElements().add(item1);
DefaultSubMenu subMenu = DefaultSubMenu.builder()
.label("Gestion")
.icon("pi pi-cog")
.build();
DefaultMenuItem subItem = DefaultMenuItem.builder()
.value("Utilisateurs")
.outcome("/users/list.xhtml")
.build();
subMenu.getElements().add(subItem);
model.getElements().add(subMenu);
}
public MenuModel getModel() {
return model;
}
}
```
---
## 📚 Ressources
### Documentation Officielle
- **PrimeFaces** : https://primefaces.github.io/primefaces/14_0_0/
- **PrimeFlex** : https://www.primefaces.org/primeflex/
- **PrimeIcons** : https://www.primefaces.org/primeicons/
### Exemples Sources Freya
- **Localisation** : `C:/Users/dadyo/PersonalProjects/lions-workspace/freya/tag/src/main/webapp/`
- Fichiers : `input.xhtml`, `crud.xhtml`, `formlayout.xhtml`, `button.xhtml`, etc.
---
## ✅ Bonnes Pratiques
1. **Utiliser les classes Freya** : `grid`, `card`, `field`, `formgrid`
2. **Pattern field cohérent** : Label + Input + Message
3. **ui-fluid pour formulaires** : Inputs 100% width
4. **Responsive design** : Utiliser `col-12 lg:col-6` etc.
5. **Icônes PrimeIcons** : `pi pi-*`
6. **Styles de boutons** : `ui-button-success`, `ui-button-danger`, etc.
7. **Messages appropriés** : `p:message` pour champs, `p:growl` pour notifications
8. **Dialog modal** : Toujours avec `modal="true"` et `responsive="true"`
---
**Version** : 1.0.0
**Dernière mise à jour** : 2025-12-25