Bonjour,
Je dois réaliser un formulaire dynamique, je n'ai donc pas d'autre choix que de créer ce formulaire côté bean, puis de le "binder" côté xhtml. Il y a deux difficultés supplémentaires : j'aimerais que mon bean soit en request, et il faut que le formulaire dynamique puisse être rafraichit en fonction d'une valeur choisie dans un selectOneMenu.
Côté xhtml j'ai donc ça :
Dans la première partie, le selectOneMenu, qui doit rafraichir le panel qui est dans la deuxième partie.
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
18
19
20
21 <h:selectOneMenu style="width:200px" id="selectModele" value="#{monBean.valeur}"> <f:selectItems value="#{monBean.valeurs}" /> <a4j:support event="onchange" process="outputPanelQuestionPanelGrid" reRender="outputPanelQuestionPanelGrid" action="#{monBean.ajouterQuestions}" ajaxSingle="true" /> <f:validator validatorId="creationVisiteValidator" /> </h:selectOneMenu> ... <a4j:outputPanel id="outputPanelQuestionPanelGrid"> <rich:panel rendered="#{monBean.panelRendered}"> <f:facet name="header"> <h:outputText value="Champs spécifiques"></h:outputText> </f:facet> <h:panelGrid binding="#{monBean.questionPanelGrid}" /> </rich:panel> </a4j:outputPanel>
Côté java, j'ai ceci :
question.getListComponent() me renvoie bien une liste d'UIComponent, qui sont bien ajoutés à mon questionPanelGrid. Mais côté navigateur, rien ne s'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void ajouterQuestions() { questionPanelGrid.getChildren().clear(); Modele modele = modeleService.charger(valeur); if (modele.getTypeUi() != null) { QuestionOw question = new QuestionOw(modele.getTypeUi().getChampTypeUis(), valeurChampService); for (UIComponent component : question.getListComponent()) { questionPanelGrid.getChildren().add(component); } } }
J'ai essayé de mettre mon bean en session, pour voir. Et là, tout fonctionne bien, les UIComponent que j'ajoute sur mon panelGrid s'affichent bien dans le navigateur.
Info supplémentaire : mon bean est en "keepAlive" :
Je ne donne pas tout le contenu du bean (qui fait 1000 lignes) ni du xhtml (200 lignes), sinon ça risquerait d'être un peu indigeste, donc j'espère que je n'oublie rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <a4j:keepAlive beanName="monBean" ajaxOnly="true"/>
Je crois que j'ai un peu de mal à cerner le fonctionnement exact d'un binding.
Est-ce que quelqu'un connaitrait une solution ?
Merci.
Partager