Bonjour,
J'ai un problème avec les valeurs passées à mon backing bean. J'ai une liste dans laquelle j'utilise un commandLink en regard de chaque élément, pour permettre de modifier l'élément. Le lien ressemble à ça :
On se trouve dans une dataTable, item est un élément du tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <h:commandLink immediate="true" action="edit" actionListener="#{userMod.editAction}"> <img src="edit.gif" border="0" /> <f:attribute name="user_id" value="#{item.user_id}" /> </h:commandLink>
L'idée serait de récupérer la valeur "user_id" comme attribut dans la méthode servant d'actionListener, ce qui ne pose aucun problème en soi, mais avec le managed bean contenant item en portée request, ce qui est transmis comme attribut est incorrect.
En effet, l'instance du bean utilisée pour générer la dataTable n'existe plus lors de l'appel du commandLink, et l'appel à #{item.user_id} renvoie 0.
Si j'utilise une portée session pour le bean, tout fonctionne sans problème. Mais je me dis qu'il doit exister une solution pour le garder en portée request, la valeur que je désire passer en paramètre étant bien présente sur la page quand on la visualise. C'est à la "sortie" de la page (par le commandLink), que l'EL #{item.user_id} est évalué à nouveau, et le bean n'existant plus, il donne une valeur par défaut. En quelque sorte, j'aimerais qu'il n'y ait pas cette évaluation.
Ou alors, il doit exister d'autres moyens de passer un paramètre venant d'un managed bean (portée request) à une méthode actionListener ? Je suis à cours d'idée...
Toute suggestion est la bienvenue.
Merci.
Partager