Wie die Liste in einer SelectOneMenu ändern, wenn der Wert in einem anderen geändert wird?

StackOverflow https://stackoverflow.com/questions/1346088

  •  20-09-2019
  •  | 
  •  

Frage

Ich mag die SelectItem[] Array in dem zweiten SelectOneMenu ändern, wenn der Wert in dem ersten geändert wird. Ist das möglich?

War es hilfreich?

Lösung

Ich dachte, dies, aber ich verwenden, Richfaces AJAX-Funktionalität nicht nur JSF. Einfach den Tag zu meinem ersten selectOneMenu hinzugefügt, und es funktioniert:)

<a4j:support event="onchange" action="#{bean.onChange}"
             reRender="otherSelectOneMenuID"/>

Vielen Dank für die Antwort sowieso!

Andere Tipps

Sollte möglich sein, wenn Sie einen Wert ändert Hörer an dem ersten selectOneMenu binden.

Holen Sie sich den neuen Wert aus der ValueChangeEvent und die Liste entsprechend aktualisieren. die JSF-Seite sollte dann die aktualisierte Liste angezeigt werden soll.

Ich hoffe, das macht Sinn!

Nun habe ich a4j und es hat funktioniert.

<code>
//JSF
<h:outputLabel value="First selectOneMenu: "/>
<h:selectOneMenu value="#{yourBackingBean.selectedItem}">
<f:converter converterId="defaultConverter"/>
<f:selectItem id="df01" itemLabel="Item01" itemValue="1" />
<f:selectItem id="df02" itemLabel="Item02" itemValue="2" />
<f:selectItem id="df03" itemLabel="Item03" itemValue="3" />
<a4j:support event="onchange" reRender="secondSelectOneMenu"/> //secondSelectOneMenu is the id of the dropdown you want to change
</h:selectOneMenu>


<h:outputLabel value="Second selectOneMenu: "/>
<h:selectOneMenu value="#{yourBackingBean.attributeToStoreSelectedValue}" id="secondSelectOneMenu">
<f:converter converterId="defaultConverter"/>
<f:selectItem id="df00" itemLabel="Select" itemValue="0" /> //Default value
<f:selectItems value="#{yourBackingBean.returnByChoice}" />
</h:selectOneMenu>


//Converter

public class DefaultConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
    return value;
}

public String getAsString(FacesContext ctx, UIComponent component, Object value) {
    String label = "";
    if (value != null) {
        label = value.toString();
    }
    return label;
}
}

//Backing Bean Sample
public List<SelectItem> returnByChoice() { //it must return a list of SelectItems so it can be displayed on the jsf page
   String id = (String) getSelectedItem(); //this is the value chosen from the first dropDownMenu wich selectedItem is the attribute onthe binding of the first dropDownMenu.
   ArrayList<SelectItem> arrItems = new ArrayList<SelectItem>();
   if (id != null) {

            List<YourClass> yourObjectList = yourDao.findAllItemsFromType(new Integer(id));

         Iterator<YourClass> iterator = yourObjectList.iterator();
         String tempName = "";
         String tempId = "";
         YourClass tempYourObject = null;

        while (iterator.hasNext()) {
           tempYourObject = iterator.next();
           tempId = String.valueOf(tempYourObject.getId());
           tempName = tempYourObject.getName();
           arrItems.add(new SelectItem(tempId, tempName));
        }
    }
    return arrProfiles;
}
</code>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top