Bonjour à tous,

Dans le cadre de la réalisation d'un site, je dois faire une page de CRUD sur une liste de membres en une seule page (donc un seul fichier .xhtml car j'utilise Facelets).

L'idée c'est que quand on arrive sur la page, on a le formulaire d'Ajout et en dessous la liste des membres. Sur chaque ligne de la table, on a 2 boutons : Editer et Supprimer. Si on clique sur Supprimer, ca vire le membre (on s'en serait douté). Si on clique sur Editer, le formulaire d'Ajout doit disparaitre et celui d'Edition apparaitre à sa place avec les champs pré-remplis et un nouveau bouton "Valider édition" en dessous du formulaire. Si ce bouton est cliqué, le membre est mis a jour et le formulaire d'Ajout revient a la place de celui d'Edition.

Dans la page, j'ai en gros :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<f:view>
<h:form>
 
<t:panelGroup rendered="#{!backing.tryEdit}">
... Formulaire ajout...
</t:panelGroup>
 
<t:panelGroup rendered="#{backing.tryEdit}">
... Formulaire edition...
</t:panelGroup>
 
<t:dataTable ....>
... La liste des membres...
</t:dataTable>
 
</h:form>
</f:view>
Et un bean "backing", de scope Request, dans lequel je bind tous les champs des formulaires. Il possède aussi deux attributs "Membre selectedMembre" et "boolean tryEdit = false". Lorsque je clique sur un bouton "Editer", cela appelle une méthode qui récupère le membre de la ligne correspondant et l'affecte dans selectedMembre tout en mettant "tryEdit" a true. Le bouton d'ajout appelle une méthode qui crée le membre, les boutons supprimer appellent une méthode qui supprime le membre désigné. Le bouton "Valider edition" récupère les valeurs des champs du formulaire d'édition et met à jour le membre. Les retours de toutes ces fonctions sont la string "#"

Bon, le soucis, c'est que ca marche pas du tout. Lorsque j'arrive sur la page, j'ai formulaire d'ajout et liste. Normal. Mais si je clique sur "Editer" ou "Supprimer", rien ne se passe... J'ai mis des System.out.print dans mes méthodes, ils ne s'affichent même pas, semblant dire que les méthodes ne sont mêmes pas appelées.

Truc marrant en revanche, si je crée un membre, je reste sur la même page, la liste apparait avec une ligne de plus (celle du nouveau membre) et là si je clique sur Editer ou Supprimer dans la liste, cela marche ! Soit le membre est viré, soit le formulaire d'edition apparait. Bon apres, "Validation edition", ca marche pas, et le moindre rechargement de la page remet les boutons Editer et Supprimer hors course.

J'enrage un peu car je pense que cela vient probablement du scope request mais non seulement j'ai pas vraiment envie de le changer et en plus je vois vraiment pas pourquoi le formulaire d'edition ne s'affiche pas quand je clique sur Editer.

Si quelqu'un a une idée ou a déjà fait un truc dans le genre, merci d'avance pour votre aide.