Bonjour à tous,
Mon problème je pense pourras peut-être en intéresser plus d'un. J'ai fait quelques recherches sur le net mais je n'arrive pas à trouver de solution alors j'en appel aux experts JSF.
Mon but est de faire un formulaire dynamique. En gros, j'ai une page JSF dans laquelle se trouve un bouton "Add". A chaque clique sur le bouton j'ajoute un composant dans la page, en l'ajoutant simplement à un panelGrid.
J'ai un bean dans lequel j'initialise la grid, puis ensuite une action méthod qui ajoute à chaque clique un composat à la grid.
dans getGrid() :
dans addComponentToGrid() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UIOutput output = new UIOutput(); output.setId("myoutput"); output.setValue("Hello"); grid = new HtmlPanelGrid(); grid.getChildren().add(output);
ici nbCells est un attribut du bean qui stock le nombre de fois où je passe dans la méthode addComponentToGrid().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 nbCells++; for(int i=0;i<nbCells;i++) { UIOutput output = new UIOutput(); output.setId("myOutputID" + <quelquechosedunique); output.setValue("Valeur ajoutée"); grid.getChildren().add(output); } return null; // on recharge la même page
Le problème est le suivant : cela marche une fois, deux fois, trois fois puis le comportement devient complètement irréaliste et des anciens objets sont ajoutés à la liste...
J'ai alors été voir dans le debugger dans l'objet UIViewRoot du FaceContext et là je vois que des fois d'anciens objets réapparaissent dans la hièrarchie puis des fois disparraissent!!! Comme si un cache était géré par JSF mais que certains objets disparaissaient et réapparaissaient.
Bref je ne comprends pas grand chose à la gestion du UIViewRoot donc si quelqu'un pouvait m'expliquer ce qui se passe je lui en serais très reconnaissant.
Merci d'avance à tous.
++
Partager