Twórz listy rozwijane zależne / kaskadowe selectOneMenu w JSF

Próbuję stworzyć 4 zależne menu.

Gdy użytkownik wybierze element z pierwszego menu, drugie menu pokaże dane zależne, a gdy użytkownik wybierze element z drugiego, trzeci wyświetli dane zależne i tak dalej.

Użytkownik zobaczy elementy tylko w pierwszym menu, a pozostałe będą puste. Jeśli wybierze element w pierwszym menu, drugi pokaże dane, ale trzeci i czwarty pozostaną puste, i tak dalej. Użytkownik musi ostatecznie wybrać wpisy ze wszystkich 4 menu.

<h:selectOneMenu id="first" value="#{nodes.selectState"}>
    <f:selectItems value="#{nodes.stateList}"/>
    <f:ajax render="second">
</h:selectOneMenu>
<h:selectOneMenu id="second" value="#{nodes.selectCity"}>
    <f:selectItems value="#{nodes.cityList}"/>
    <f:ajax render="third">
</h:selectOneMenu>
<h:selectOneMenu id="third" value="#{nodes.selectRegion"}>
    <f:selectItems value="#{nodes.regionList}"/>
    <f:ajax render="fourth">
</h:selectOneMenu>
<h:selectOneMenu id="fourth" value="#{nodes.selectStation"}>
    <f:selectItems value="#{nodes.stationList}"/>
</h:selectOneMenu>

węzły Klasa Java

private String selectState; //+setters, getters
private String selectCity; //+setters, getters
private String selectRegion; //+setters, getters
private String selectStation; //+setters, getters
private List<SelectItem> stateList; //+setters, getters
private List<SelectItem> cityList; //+setters, getters
private List<SelectItem> regionList; //+setters, getters
private List<SelectItem> stationList; //+setters, getters

public getStateList(){
    stateList= new ArrayList<SelectItem>();
    stateList.add(new SelectItem("A"));
}

public getCityList(){
    CityList= new ArrayList<SelectItem>();
    if(selectState.equals("A")){
        CityList.add(new SelectItem("B"));
    }
}

public getRegionList(){
    RegionList= new ArrayList<SelectItem>();
    if(selectCity.equals("B")){
        RegionList.add(new SelectItem("C"));
   }
}

public getStationList(){
    StationList= new ArrayList<SelectItem>();
    if(selectRegion.equals("C")){
        StationList.add(new SelectItem("D"));
    }
}

działa tylko w pierwszych 2 menu, pozostałe 2 menu otrzymują wartości null

questionAnswers(4)

yourAnswerToTheQuestion