Quelle est la manière correcte d'avoir une case à cocher booléenne dans chaque ligne dans un JSF/RichFaces dataTable
? J'ai essayé l'extrait suivant:Quelle est la bonne façon d'avoir une case à cocher booléenne dans un JSF/RichFaces `dataTable`?
<rich:dataTable id="customerList"
var="_customer"
value="#{customerList.resultList}"
rendered="#{not empty customerList.resultList}" >
<h:column>
<h:selectBooleanCheckbox
value="#{customerList.selectedCustomers[_customer.id]}" />
</h:column>
...
</rich:dataTable>
Je mis mon customerList
d'avoir un Map<Integer, Boolean> selectedCustomers
. Choses semblent pour bien fonctionner, sauf que, apparemment, la case à cocher est en train d'être mappé par un index de tri, pas réellement par l'ID, et cela me cause un problème. Par exemple, lorsque j'ouvre la page ci-dessus et cochez la case de la première ligne et que j'appuie sur le bouton «Supprimer», tout fonctionne correctement et la page est rechargée sans le client sélectionné. Mais si j'appuie sur "Actualiser" ou "Recharger" puis, (et accepter l'avertissement du navigateur de données renvoyées), le client qui est maintenant dans la première rangée est supprimé!
Que dois-je faire pour que la case à cocher soit liée à l'ID sélectionné uniquement?
Merci. Bien que je ne sois pas très clair comment cela fonctionne (ou ce qui rendra l'état de ligne de sécurité incohérent), la note sur la soumission de formulaire en double et Seam est utile. Je vais essayer Seam's ''. –
Lorsque le formulaire est soumis, les lignes seront décodées par index. Puisque l'identifiant dans le champ caché ne correspond plus à l'identifiant de cet index sur le serveur, la logique métier sait qu'il y a un problème. Le fait de faire fonctionner l'id setter/getter avec différentes variables membres est utilisé pour le déterminer. – McDowell
Très bien, +1, merci. Mais serait-ce plus simple si je n'utilisais que des cases à cocher normales en HTML, et les prenais sous la forme d'une liste contenant les identifiants? –