114 lines
2.8 KiB
Markdown
114 lines
2.8 KiB
Markdown
# 🔧 Correction du Warning DataTable
|
|
|
|
**Date**: 2025-12-18
|
|
|
|
---
|
|
|
|
## ⚠️ Warning Corrigé
|
|
|
|
**Message**:
|
|
```
|
|
DataTable with paginator=true should also set the rows attribute. ClientId: formUserList:userTable
|
|
```
|
|
|
|
**Fichier**: `lions-user-manager-client-quarkus-primefaces-freya/src/main/resources/META-INF/resources/pages/user-manager/users/list.xhtml`
|
|
|
|
---
|
|
|
|
## 🔍 Analyse du Problème
|
|
|
|
Le DataTable avait déjà l'attribut `rows="#{userListBean.pageSize}"`, mais PrimeFaces générait un warning car :
|
|
|
|
1. **Valeur potentiellement null** : Si `userListBean.pageSize` est `null` ou non initialisé, PrimeFaces ne peut pas déterminer le nombre de lignes par page
|
|
2. **Exigence PrimeFaces** : Quand `paginator="true"`, l'attribut `rows` doit avoir une valeur définie (non null)
|
|
|
|
---
|
|
|
|
## ✅ Solution Appliquée
|
|
|
|
### Avant
|
|
```xml
|
|
<p:dataTable
|
|
id="userTable"
|
|
value="#{userListBean.users}"
|
|
var="user"
|
|
rowKey="#{user.id}"
|
|
paginator="true"
|
|
rows="#{userListBean.pageSize}"
|
|
rowsPerPageTemplate="10,20,50"
|
|
...>
|
|
```
|
|
|
|
### Après
|
|
```xml
|
|
<p:dataTable
|
|
id="userTable"
|
|
value="#{userListBean.users}"
|
|
var="user"
|
|
rowKey="#{user.id}"
|
|
paginator="true"
|
|
rows="#{userListBean.pageSize != null ? userListBean.pageSize : 10}"
|
|
rowsPerPageTemplate="10,20,50"
|
|
...>
|
|
```
|
|
|
|
**Changement** : Ajout d'une valeur par défaut de `10` si `pageSize` est `null` en utilisant l'opérateur ternaire EL.
|
|
|
|
---
|
|
|
|
## 📝 Explication Technique
|
|
|
|
### Expression Language (EL) Utilisée
|
|
|
|
```xml
|
|
rows="#{userListBean.pageSize != null ? userListBean.pageSize : 10}"
|
|
```
|
|
|
|
**Comportement** :
|
|
- Si `userListBean.pageSize` est défini et non null → utilise cette valeur
|
|
- Si `userListBean.pageSize` est null → utilise `10` comme valeur par défaut
|
|
|
|
### Pourquoi 10 ?
|
|
|
|
- ✅ Valeur standard pour les tableaux paginés
|
|
- ✅ Correspond à la première option dans `rowsPerPageTemplate="10,20,50"`
|
|
- ✅ Bon compromis entre performance et lisibilité
|
|
|
|
---
|
|
|
|
## 🎯 Résultat
|
|
|
|
### Avant
|
|
- ⚠️ Warning à chaque chargement de la page
|
|
- ⚠️ Comportement imprévisible si `pageSize` est null
|
|
|
|
### Après
|
|
- ✅ Plus de warning
|
|
- ✅ Comportement prévisible avec valeur par défaut
|
|
- ✅ Pagination fonctionne correctement même si `pageSize` n'est pas initialisé
|
|
|
|
---
|
|
|
|
## 🔄 Alternative (Si Nécessaire)
|
|
|
|
Si vous préférez une valeur fixe au lieu d'une valeur dynamique avec fallback :
|
|
|
|
```xml
|
|
rows="10"
|
|
```
|
|
|
|
**Avantage** : Plus simple, pas de dépendance à `pageSize`
|
|
**Inconvénient** : Ne respecte pas la préférence utilisateur stockée dans `pageSize`
|
|
|
|
---
|
|
|
|
## 📚 Références
|
|
|
|
- [PrimeFaces DataTable Documentation](https://www.primefaces.org/docs/vdl/14.0.0/primefaces-p/dataTable.html)
|
|
- [JSF Expression Language (EL)](https://jakarta.ee/specifications/faces/3.0/jakarta-faces-spec-3.0.html#el)
|
|
|
|
---
|
|
|
|
*Document créé le: 2025-12-18*
|
|
|