Was ich möchte, einfach zu tun, zu erklären ist:JSF - Erstellen Sie ein dynamisches Menü mithilfe von 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>
Wenn ich ändern die Wert der Listbox, sollte sich das Menü dynamisch ändern (durch Aufruf einer Funktion auf dem Server). Ich denke, dass der obige Code das ausdrückt, wonach ich suche.
Ich muss wissen, wie es mit der Option onchange aufrufen. Ist es möglich?
Prost
UPDATE
<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>
Ja, dies sollte funktioniert. Aber ich muss das tun, wenn ich das fokussierte Element ändere. Wie "mach es auf onchange" :) – markzzz
Add 'event =" ändern "'. Es ist jedoch bereits das Standardereignis für 'h: selectOneMenu'. Hast du es trotzdem versucht? Genau diese Linie, wie von Brian vorgeschlagen, sollte schon ausreichen. – BalusC
Wie BalusC gezeigt hat, können Sie das Ereignisattribut angeben, auf dem das Ajax-Ereignis ausgelöst wird, wobei das Ereignis das DOM-Ereignis ist. Das Standardereignis für eine Listbox ist "ändern". Weitere Details finden Sie in der JSF2-API: http: //download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/f/ajax.html –