# selectOneMenu - items über ajax



## number8 (17. Apr 2007)

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


----------



## WeirdAl (18. Apr 2007)

Hi,
mit a4j kannst Du das folgendermaßen realisieren:


```
...

		<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


----------



## number8 (22. Apr 2007)

Ich danke Dir für den Hinweis. Das a4j werde ich mir unbedingt anschauen, auch obwohl wir es anders gelöst haben.


----------



## number8 (3. Mai 2007)

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).


```
<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.


----------

