Ce que je voudrais faire est simple à expliquer:JSF - Créer un menu dynamique en utilisant AJAX & selectOneListbox
bean
@ManagedBean
@ViewScoped
public class Articles {
private String selectedMenu;
@PostConstruct
public void init() {
if(selectedMenu==null || selectedMenu.trim().isEmpty()) {
this.selectedMenu="0";
}
}
public String getSelectedMenu() { return selectedMenu; }
public void setSelectedMenu(String selectedMenu) { this.selectedMenu = selectedMenu; }
}
page
<h:selectOneListbox onchange="..?? ajax call that render on loadMenu and pass the value of the focused listbox to Articles Bean" id="category" size="0" >
<f:selectItem itemLabel="first" itemValue="0" />
<f:selectItem itemLabel="second" itemValue="1" />
<f:selectItem itemLabel="third" itemValue="2" />
</h:selectOneListbox>
<h:panelGroup layout="block" id="loadMenu">
<h:panelGroup rendered="#{articles.selectedMenu=='0'}">
MENU 0
</h:panelGroup>
<h:panelGroup rendered="#{articles.selectedMenu=='1'}">
MENU 1
</h:panelGroup>
<h:panelGroup rendered="#{articles.selectedMenu=='2'}">
MENU 2
</h:panelGroup>
</h:panelGroup>
Quand je change la valeur de la listbox, le menu devrait changer dinamiquement (en appelant une fonction sur le serveur). Je pense que le code ci-dessus exprime ce que je cherche.
Je dois savoir comment l'appeler en utilisant l'option onchange. C'est possible?
Vive
MISE À JOUR
<h:panelGroup layout="block">
<h:selectOneListbox styleClass="article_combo" size="0" id="selectedMenu" >
<f:selectItem itemLabel="first" itemValue="0" />
<f:selectItem itemLabel="second" itemValue="1" />
<f:selectItem itemLabel="third" itemValue="2" />
<f:ajax event="change" execute="@this" render="loadMenu" />
</h:selectOneListbox>
</h:panelGroup>
<h:panelGroup layout="block" id="loadMenu">
<h:panelGroup rendered="#{articles.selectedMenu=='0'}">
MENU 0
</h:panelGroup>
<h:panelGroup rendered="#{articles.selectedMenu=='1'}">
MENU 1
</h:panelGroup>
<h:panelGroup rendered="#{articles.selectedMenu=='2'}">
MENU 2
</h:panelGroup>
</h:panelGroup>
Oui, ce devrait fonctionner. Mais je dois faire ceci quand je change l'élément focalisé. Comme "faites-le sur onchange" :) – markzzz
Ajoutez 'event =" change "'. Cependant, est déjà l'événement par défaut pour 'h: selectOneMenu'. Avez-vous essayé de toute façon? Juste exactement cette ligne comme suggéré par Brian devrait déjà suffire. – BalusC
Comme l'a souligné BalusC, vous pouvez spécifier l'attribut d'événement sur lequel l'événement ajax se déclenche, où l'événement est l'événement DOM. L'événement par défaut pour une liste est "changer". Voir l'API JSF2 pour plus de détails: http: //download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/f/ajax.html –