Frage

Ich versuche, ein paar Dropdown -Menüs in einen A4J zu stecken: Wiederholen. Die Werte für den zweiten Dropdown hängen vom in der ersten ausgewählten Wert ab. Im Folgenden finden Sie den Code, den ich verwenden möchte, aber er übergibt einen leeren Parameter:

<a4j:repeat id="localRepeat" var="local" value="#{InstanceController.instance.locations}" rowKeyVar="row">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Theater:" />
                        <h:selectOneMenu  id="theater" converter="#{TheaterConverter}" value="#{local.theater}">
                            <f:selectItems id="theaters" value="#{InstanceController.allTheaters}" />
                            <a4j:support event="onchange" action="#{InstanceController.getAllCountriesInTheater}" reRender="country" >
                                <f:param name="theater" value="#{local.theater.id}"/>
                            </a4j:support>
                        </h:selectOneMenu>

                        <h:outputLabel value="Country:" />
                        <h:selectOneMenu immediate="true" id="country" converter="#{CountryConverter}" value="#{local.country}">
                            <f:selectItems  value="#{InstanceController.allCountriesInTheater}" />
                            <a4j:support event="onchange" reRender="state" />
                        </h:selectOneMenu>

                    </h:panelGrid>
                    <rich:spacer height="10px" />
                </a4j:repeat>

Wenn ich den Param anstelle von "#{local.theater.id}" ändere, funktioniert es wie erwartet.

Gibt es eine Möglichkeit, den ausgewählten Wert der ersten Dropdown -Wert zu erhalten und ihn als Parameter zu senden?

War es hilfreich?

Lösung

Aus diesem Grund funktioniert dies nicht, dass der aktuelle Wert von lokal.theater.id dem Parameter bereits zugewiesen ist, wenn das F: Param -Tag gerendert wird. Der Theaterparam enthält also die Ausweise des Theaters, das ausgewählt wurde, als die Seite gerendert wurde - wahrscheinlich null, weil noch kein Theater ausgewählt wurde.

Was Sie versuchen zu tun, ist weitaus einfacher: Entfernen Sie einfach den F: Param und verwenden Sie die Eigenschaft direkt. Wenn der A4J: Support -Tag auslöst, da der SelectBox -Wert geändert wurde, validiert JSF Ihre Formular -Tags und weist die entsprechenden Modellwerte zu. Wenn also die Getallcountiesintheater -Aktion ausgeführt wird, enthält die örtliche Eigenschaft der Theater bereits das ausgewählte Theater.

Abhängig davon, wie Ihre Backing -Bohnen gestaltet sind, benötigen Sie wahrscheinlich einen Parameter, um den Ort zu identifizieren, für den die SelectBox geändert wurde. Die Aktion von GetAllcountiesintheater wird also an welchen Standorten nach dem ausgewählten Theater suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top