JSF SelectOneMenu - Probleme mit AJAX

Spawn90

Mitglied
Hallo liebe Community,

ich wende mich an euch da ich ein sehr großes Problem habe. Ich programmiere seit Kurzem an einer Aufgabenverwaltung für einen Freund von mir. Da ich schon früher Java-Anwendungen geschrieben habe und JSF mir auf Anhieb gefiel (ich benutze PrimeFaces) habe ich mich kurzerhand dafür entschieden.

Nun habe ich aber das Problem, dass ich zwei Dropdown-Boxen habe, wobei sich die zweite abhängig von der ersten mit Daten füllen soll.

Dazu hier meine Form:

Java:
<h:form>
                    <p:growl id="growl_projekt" showDetail="true" />
                    <p:panelGrid columns="4">
                        <h:outputText value="Projekt" />
                        <p:selectOneMenu value="#{procon.akt_projekt}">
                            <f:selectItem itemValue="" itemLabel="-" />
                            <f:selectItems value="#{procon.projekte}" var="menu_projekt" itemLabel="#{menu_projekt.bezeichnung}" />
                            <p:ajax event="change" update="id_milestone_menu" />
                        </p:selectOneMenu>
                        <h:outputText value="Meilenstein" id="id_milestone_menu" />
                        <p:selectOneMenu value="#{procon.akt_meilenstein}">
                            <f:selectItem itemValue="" itemLabel="-" />
                            <f:selectItems value="#{procon.meilensteine}" />
                        </p:selectOneMenu>
                    </p:panelGrid>
                    <p:dataTable var="task" value="#{procon.aufgaben}">
                        <p:column headerText="Bezeichnung">
                            <h:outputText value="#{task.bezeichnung}" />
                        </p:column>
                    </p:dataTable>
                </h:form>

Nun müsste sich jetzt nach meinem Verständnis die zweite Box anhand der Daten der ersten Box aktualisieren? Oder doch nicht?

Ich habe dieses bereits durchprobiert: PrimeFaces - ShowCase

bin aber leider zu keinem Ergebnis gekommen! Das witzige ist, dass das Beispiel in meinem Projekt nicht funktioniert hat! Ich benutze PrimeFaces 3M4!

Vielen Dank für die Hilfe, lg
 
zum einen solltest du dem zweiten selectOneMenu eine ID verpassen und diese updaten. Aktuell updatest du ein outputtext mit einem festen Wert.

Du kannst auch mit verschiedenen Events spielen, wie z.B. click und blur.
 
Ach Entschuldigung... Ich habe die ID aus Versehen zur outputText gesetzt. Ich werde das direkt einmal testen. Gibt es eigentlich eine Liste an Events?

[EDIT]Ich habe jetzt den Sourcecode oben angepasst. Nach wie vor keine Änderung... Ich habe es bei InputText probiert, da funktioniert AJAX tadellos.

Java:
<h:form>
                    <p:growl id="growl_projekt" showDetail="true" />
                    <p:panelGrid columns="4">
                        <h:outputText value="Projekt" />
                        <p:selectOneMenu value="#{procon.akt_projekt}">
                            <f:selectItem itemValue="" itemLabel="-" />
                            <f:selectItems value="#{procon.projekte}" var="menu_projekt" itemLabel="#{menu_projekt.bezeichnung}" />
                            <p:ajax event="change" update="id_milestone_menu" />
                        </p:selectOneMenu>
                        <p:selectOneMenu value="#{procon.akt_meilenstein}" id="id_milestone_menu">
                            <f:selectItem itemValue="" itemLabel="-" />
                            <f:selectItems value="#{procon.meilensteine}" />
                        </p:selectOneMenu>
                    </p:panelGrid>
                    <p:dataTable var="task" value="#{procon.aufgaben}">
                        <p:column headerText="Bezeichnung">
                            <h:outputText value="#{task.bezeichnung}" />
                        </p:column>
                    </p:dataTable>
                </h:form>

[/EDIT]
 
Zuletzt bearbeitet:
Hast du auch die beiden von mir erwähnten events probiert?

Die Events sind eigentlich javascript events und haben den selben Namen, nur ohne "on" ('onclick' => 'click'). Eine konkrete Liste kenne ich jetzt nicht, würde mich auch interessieren.
 
Ein kurzer Blick in die API DOC von PrimeFaces zeigt ein paar Primefaces spezifische Events. Vermutlich funktionieren die auch nur bei bestimmten Komponenten:

Code:
AutoCompleteEvent 
AutoUpdateComponentListener 
CaptureEvent 
CloseEvent 
ColumnResizeEvent 
DashboardReorderEvent 
DateSelectEvent 
DragDropEvent 
FileUploadEvent 
FlowEvent 
ItemSelectEvent 
NodeCollapseEvent 
NodeExpandEvent 
NodeSelectEvent 
NodeUnselectEvent 
RateEvent 
ResizeEvent 
RowEditEvent 
ScheduleEntryMoveEvent 
ScheduleEntryResizeEvent 
ScheduleEntrySelectEvent 
SelectEvent 
SlideEndEvent 
TabChangeEvent 
TabCloseEvent 
ToggleEvent 
TransferEvent 
UnselectEvent

[EDIT]In der Primefaces Doku gibt es einige Hinweise auf Events[/EDIT]
 
Zuletzt bearbeitet:
Danke für die Info. Ich weiß jetzt übrigens auch was zumindest der Fehler in der Beispielanwendung von PrimeFaces war. Muss irgendwie selber darüber lachen.

Anscheinend wird für die Anwendung die dargestellt wird nicht der Beispielcode verwendet. Dieser war nämlich fehlerhaft. Es wurde in der Bean auf die Annotation @ManagedBean vergessen.

Habe das nun getestet, das lief auch. Werde nun in meinem Projekt anhand dieses Beispiels nach dem Fehler fahnden und mein Ergebnis posten.

lg
 
Dieser war nämlich fehlerhaft. Es wurde in der Bean auf die Annotation @ManagedBean vergessen.

Das ist nicht zwangsläufig ein Fehler. Du kannst auch ManagedBeans in der faces-config.xml eintragen. Die ist im showcase nicht zu sehen und die Macher gehen wohl davon aus, dass man sich mit JSF und Managed Beans auskennt.
 

Neue Themen


Zurück
Oben