<h:form> <p:growl id="msgs" showDetail="true" skipDetailIfEqualsSummary="true" /> <p:panel header="Select a Location" style="margin-bottom:10px;"> <h:panelGrid columns="2" cellpadding="5"> <p:outputLabel for="country" value="Country: " /> <p:selectOneMenu id="country" value="#{dropdownView.country}" style="width:150px"> <p:ajax listener="#{dropdownView.onCountryChange}" update="city" /> <f:selectItem itemLabel="Select Country" itemValue="" noSelectionOption="true" /> <f:selectItems value="#{dropdownView.countries}" /> </p:selectOneMenu> <p:outputLabel for="city" value="City: " /> <p:selectOneMenu id="city" value="#{dropdownView.city}" style="width:150px"> <f:selectItem itemLabel="Select City" itemValue="" noSelectionOption="true" /> <f:selectItems value="#{dropdownView.cities}" /> </p:selectOneMenu> </h:panelGrid> <p:separator /> <p:commandButton value="Submit" update="msgs" action="#{dropdownView.displayLocation}" icon="pi pi-check" /> </p:panel> </h:form>
@Named @ViewScoped public class DropdownView implements Serializable { private Map<String,Map<String,String>> data = new HashMap<String, Map<String,String>>(); private String country; private String city; private Map<String,String> countries; private Map<String,String> cities; @PostConstruct public void init() { countries = new HashMap<String, String>(); countries.put("USA", "USA"); countries.put("Germany", "Germany"); countries.put("Brazil", "Brazil"); Map<String,String> map = new HashMap<String, String>(); map.put("New York", "New York"); map.put("San Francisco", "San Francisco"); map.put("Denver", "Denver"); data.put("USA", map); map = new HashMap<String, String>(); map.put("Berlin", "Berlin"); map.put("Munich", "Munich"); map.put("Frankfurt", "Frankfurt"); data.put("Germany", map); map = new HashMap<String, String>(); map.put("Sao Paulo", "Sao Paulo"); map.put("Rio de Janerio", "Rio de Janerio"); map.put("Salvador", "Salvador"); data.put("Brazil", map); } public Map<String, Map<String, String>> getData() { return data; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Map<String, String> getCountries() { return countries; } public Map<String, String> getCities() { return cities; } public void onCountryChange() { if(country !=null && !country.equals("")) cities = data.get(country); else cities = new HashMap<String, String>(); } public void displayLocation() { FacesMessage msg; if(city != null && country != null) msg = new FacesMessage("Selected", city + " of " + country); else msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid", "City is not selected."); FacesContext.getCurrentInstance().addMessage(null, msg); } }