Bonjour !
Je travaille sur une petite appli web avec une navigation par onglet et, pour commencer, j'ai codé l'ensemble du contenu de mes pages jsp dans le même fichier.
En gros, l'archi de la page est comme ca : un menu, endessous duquel se trouve une combobox h:selectonemenu qui, lors d'un changement d'élément, réaffiche une datatable.
Quand tout est dans le même fichier, tout fonctionne correctement, mais comme ce n'est pas facile de maintenir du code quand tout est dans le même fichier, j'ai décidé de diviser le fichier. Mon index.jsp contient juste le menu, et mon fichier techs.jsp contient la combobox et la datable.
Comme je l'ai dit tout fonctionne correctement quand tout est dans le même fichier, mais maintenant que tout est séparé, lorsque j'inclue mon fichier techs.jsp dans index.jsp avec le tag jsp:include, la methode valueChangeListener attachée à ma combobox est completement ignorée et ma table n'est donc pas raffraichie correctement.
Voici une partie de mon code :
Je ne pense pas qu'il soit nécessaire de montrer ce a quoi ressemble index.jsp vu qu'il ne contient que les onglets et l'include.
techs.jsp :
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 <f:subview id="tabTech"> <ui:form id="form1"> <ui:panelLayout binding="#{TabTech.layoutPanel6}" id="layoutPanel6" panelLayout="flow" style="background-color: #0b1d4f; width: 100%; height: 100%"> .......... <h:selectOneMenu binding="#{TabTech.CB_EscTech}" id="CB_EscTech" immediate="true" title="#{EscalesManagedBean.title}" value="#{EscalesManagedBean.selectedOption}" valueChangeListener="#{EscalesManagedBean.processValueChange}" onchange="submit()"> <f:selectItems id="dropdown15SelectItems" value="#{EscalesManagedBean.listeEscales}"/> </h:selectOneMenu> <h:dataTable binding="#{TabTech.tableTech}" border="1" columnClasses="td" headerClass="list-header th" id="tableTech" rowClasses="list-row-even td, list-row-odd td" styleClass="tableau" value="#{TechniciensManagedBean.tech}" var="tech"> <h:column binding="#{TabTech.nomTech}" id="nomTech"> <h:outputText binding="#{TabTech.outputText41}" id="outputText41" title="null" value="#{tech.nomTechnicien}"/> <f:facet name="header"> Nom </f:facet> </h:column> ..........
La méthode processValueChange :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void processValueChange(ValueChangeEvent vce) throws AbortProcessingException { String newValue = (String)vce.getNewValue(); System.out.println(newValue + "valueChangeListener"); int indexSelection = trouverIndexSelection(newValue); if(indexSelection >= 0){ setTitle(listeEscalesDAO.get(indexSelection).getNomEscale()); }else{ setSelectedOption("*"); setTitle("All"); } }
Le reste du code ne contient que des éléments graphiques.
Je devrais aussi ajouter que si je lance ma page techs.jsp toute seule, elle marche parfaitement, et le raffraichissement de ma table se fait tres bien.
Je sais que le problème vient du listener qui est ignoré car ma page est quand même sousmise au serveur, et aucun des System.out.println que j'ai pu mettre dans ma methode processValueChange ne sont affichée dans le log serveur.
Je ne pense pas non plus que cela vienne du managed bean car ma liste est correctement initialisée et contient bien toutes les infos qu'elle devrait.
J'espere que vous pouvez m'aider à résoudre ce problème car je ne vois absolument pas d'ou ca peut bien provenir.
Merci
Yann
Partager