selectOneMenu - items über ajax

Status
Nicht offen für weitere Antworten.

number8

Aktives Mitglied
Hallo.
Wieder ein Problem. Man stelle sich vor, es gibt zwei Auswahlfelder(h:selectOneMenu). Das erste steht für ein Land. Das zweite für die einzelnen Bundesländer (oder halt Bundesstaaten). Nun soll, nachdem sich der Wert des Landes im ersten Feld geändert hat, im zweiten die dazugehörigen Bundesländer/staaten stehen. Ein valuechangeListener geht wegen des submits nicht (da dann alle Formulardaten validiert werden und unschöne Fehlermeldungen entstehen). Daher soll das ganze über AJAX gelöst werden. Also onchange die Werte(BundesLänder) für's jeweilige Land holen. Aber wie, ja wie befüllt man mit diesen Werten dann die zweite SelectBox??? ???:L
 
Hi,
mit a4j kannst Du das folgendermaßen realisieren:

Code:
...

		<h:outputText value="Land:" />

           <a4j:region renderRegionOnly="false">
			<h:panelGroup id="countryOneMenu">
				<h:selectOneMenu value="#{aBean.currentCountry}">
					<f:selectItems value="#{aBean.countryList}"/>
					<a4j:support event="onchange" action="#{aBean.changeStatesList}" reRender="statesOneMenu" />
				</h:selectOneMenu>
			</h:panelGroup>
			</a4j:region>
			
			<h:outputText value="Bundesstaat oder was auch immer:" />
			
			<a4j:region renderRegionOnly="false">
			<h:panelGroup id="statesOneMenu">
				<h:selectOneMenu value="#{aBean.currentState}">
					<f:selectItems value="#{aBean.statesList}"/>
					<a4j:support event="onchange"/>
				</h:selectOneMenu>
			</h:panelGroup>
			</a4j:region>
...

So habe ich das in meinem Projekt gelöst. Ich habe hier nur andere Werte und Beannamen gewählt, aber wenn Du dies anpasst müsste das so laufen. Region benötigst du, damit du nach einem reRender auf die Werte der einzelnen Inputfelder zugreifen kannst (die ansonsten leer wären). PanelGroup wird genutzt, um gezielt einen Bereich neu rendern zu können.

Ich hoffe das hilft Dir weiter
Alex
 
Ich danke Dir für den Hinweis. Das a4j werde ich mir unbedingt anschauen, auch obwohl wir es anders gelöst haben.
 
Ich habe Dein Bsp. mal umgesetzt, grob so zusagen. Das funktioniert auch alles soweit gut. Nur eins nicht, der submit bzw. command-Button. Da wird dann jedes mal eine Fehlermeldung ausgespuckt (Wert nicht göltig).

Code:
        <f:view>
            <h:form>
                <a4j:region>
                    <h:selectOneListbox size="1" value="#{bean.currentCountry}">
                        <f:selectItems value="#{bean.landList}"/>
                        <a4j:support event="onchange" reRender="setReg"/>
                    </h:selectOneListbox>
                </a4j:region>
                <hr>
                <h:panelGroup id="setReg">
                     <h:selectOneListbox size="1" value="#{bean.currentState}">
                         <f:selectItems value="#{bean.stateList}"/>
                     </h:selectOneListbox>
                     <h:outputText value="#{bean.currentCountry}"/>
                 </h:panelGroup>
                <hr>
                <h:commandButton value="los" action="#{bean.getNextPage}"/>
                <a4j:outputPanel ajaxRendered="true">
                    <h:messages/>
                </a4j:outputPanel>
            </h:form>
        </f:view>

Hat sich erledigt. Gibt dazu ein Bsp. im Netz.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben