The <ace:selectMenu> component permits selecting a value from a number of given options.
// MPL License text (see http://www.mozilla.org/MPL/) <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:ace="http://www.icefaces.org/icefaces/components" xmlns:ice="http://www.icesoft.com/icefaces/component" xmlns:icecore="http://www.icefaces.org/icefaces/core" xmlns:ui="http://java.sun.com/jsf/facelets" template="/resources/templates/content-template.xhtml"> <ui:param name="title" value="#{msgs[selectMenuBean.title]}"/> <ui:param name="description" value="#{msgs[selectMenuBean.description]}"/> <ui:param name="subMenuTitle" value="#{msgs[selectMenuBean.subMenuTitle]}"/> <ui:param name="subMenuLinks" value="#{selectMenuBean.subMenuLinks}"/> <ui:param name="resourceValue" value="#{selectMenuBean.exampleResource}"/> <ui:param name="wikiResources" value="#{selectMenuResources.wikiResources}"/> <ui:param name="tldResources" value="#{selectMenuResources.tldResources}"/> <ui:define name="example"> <style type="text/css"> .grid td { vertical-align: top; } </style> <h:form id="form"> <ace:panel id="panel"> <h:panelGrid columns="2" class="grid"> <h:panelGroup> <ace:selectMenu id="selectProvince" value="#{selectMenuBean.province}" valueChangeListener="#{selectMenuBean.provinceChange}" label="Select province: " labelPosition="top"> <f:selectItem itemValue="British Columbia" itemLabel="British Columbia" /> <f:selectItem itemValue="Alberta" itemLabel="Alberta" /> <f:selectItem itemValue="Saskatchewan" itemLabel="Saskatchewan" /> <f:selectItem itemValue="Manitoba" itemLabel="Manitoba" /> <f:selectItem itemValue="Ontario" itemLabel="Ontario" /> <f:selectItem itemValue="Quebec" itemLabel="Quebec" /> <f:selectItem itemValue="Newfoundland and Labrador" itemLabel="Newfoundland and Labrador" /> <f:selectItem itemValue="Prince Edward Island" itemLabel="Prince Edward Island" /> <f:selectItem itemValue="New Brunswick" itemLabel="New Brunswick" /> <f:selectItem itemValue="Nova Scotia" itemLabel="Nova Scotia" /> <f:selectItem itemValue="Yukon" itemLabel="Yukon" /> <f:selectItem itemValue="Northwest Territories" itemLabel="Northwest Territories" /> <f:selectItem itemValue="Nunavut" itemLabel="Nunavut" /> <ace:ajax execute="@this" render="@all" /> </ace:selectMenu> <br /> <ace:selectMenu id="selectCity" value="#{selectMenuBean.city}" rendered="#{selectMenuBean.displayCities}" label="Select city: " labelPosition="top"> <f:selectItems value="#{selectMenuBean.cities}" /> <ace:ajax execute="@this" render="@all" /> </ace:selectMenu> </h:panelGroup> <h:panelGroup> <h:outputText id="outputTxtProvince" style="margin-left:20px;" value="Province: #{selectMenuBean.province}" /> <br /> <h:outputText id="outputTxtCity" style="margin-left:20px;" value="City: #{selectMenuBean.city}" /> </h:panelGroup> </h:panelGrid> </ace:panel> </h:form> </ui:define> </ui:composition>
/* MPL License text (see http://www.mozilla.org/MPL/) */ package org.icefaces.samples.showcase.example.ace.selectmenu; import org.icefaces.samples.showcase.metadata.annotation.*; import org.icefaces.samples.showcase.metadata.context.ComponentExampleImpl; import javax.annotation.PostConstruct; import javax.faces.bean.CustomScoped; import javax.faces.bean.ManagedBean; import java.io.Serializable; import javax.faces.event.ValueChangeEvent; import javax.faces.model.SelectItem; import java.util.*; @ComponentExample( title = "example.ace.selectmenu.title", description = "example.ace.selectmenu.description", example = "/resources/examples/ace/selectmenu/selectMenuOverview.xhtml" ) @ExampleResources( resources ={ // xhtml @ExampleResource(type = ResourceType.xhtml, title="selectMenuOverview.xhtml", resource = "/resources/examples/ace/selectmenu/selectMenuOverview.xhtml"), // Java Source @ExampleResource(type = ResourceType.java, title="SelectMenuBean.java", resource = "/WEB-INF/classes/org/icefaces/samples/showcase"+ "/example/ace/selectmenu/SelectMenuBean.java") } ) @Menu( title = "menu.ace.selectmenu.subMenu.title", menuLinks = { @MenuLink(title = "menu.ace.selectmenu.subMenu.main", isDefault = true, exampleBeanName = SelectMenuBean.BEAN_NAME), @MenuLink(title = "menu.ace.selectmenu.subMenu.facet", exampleBeanName = SelectMenuFacetBean.BEAN_NAME), @MenuLink(title = "menu.ace.selectmenu.subMenu.label", exampleBeanName = SelectMenuLabelBean.BEAN_NAME), @MenuLink(title = "menu.ace.selectmenu.subMenu.indicator", exampleBeanName = SelectMenuIndicatorBean.BEAN_NAME), @MenuLink(title = "menu.ace.selectmenu.subMenu.reqStyle", exampleBeanName = SelectMenuReqStyleBean.BEAN_NAME) } ) @ManagedBean(name= SelectMenuBean.BEAN_NAME) @CustomScoped(value = "#{window}") public class SelectMenuBean extends ComponentExampleImpl< SelectMenuBean > implements Serializable { public static final String BEAN_NAME = "selectMenuBean"; private List<SelectItem> britishColumbiaCities; private List<SelectItem> albertaCities; private List<SelectItem> saskatchewanCities; private List<SelectItem> manitobaCities; private List<SelectItem> ontarioCities; private List<SelectItem> quebecCities; private List<SelectItem> newfoundlandCities; private List<SelectItem> princeEdwardIslandCities; private List<SelectItem> newBrunswickCities; private List<SelectItem> novaScotiaCities; private List<SelectItem> yukonCities; private List<SelectItem> northwestTerritoriesCities; private List<SelectItem> nunavutCities; private Map<String, List<SelectItem>> provinceCitiesMap; public SelectMenuBean() { super(SelectMenuBean.class); britishColumbiaCities = new ArrayList<SelectItem>(); britishColumbiaCities.add(new SelectItem("Kelowna")); britishColumbiaCities.add(new SelectItem("Tofino")); britishColumbiaCities.add(new SelectItem("Vancouver")); britishColumbiaCities.add(new SelectItem("Victoria")); britishColumbiaCities.add(new SelectItem("Whistler")); albertaCities = new ArrayList<SelectItem>(); albertaCities.add(new SelectItem("Banff")); albertaCities.add(new SelectItem("Calgary")); albertaCities.add(new SelectItem("Edmonton")); albertaCities.add(new SelectItem("Jasper")); saskatchewanCities = new ArrayList<SelectItem>(); saskatchewanCities.add(new SelectItem("Regina")); saskatchewanCities.add(new SelectItem("Saskatoon")); manitobaCities = new ArrayList<SelectItem>(); manitobaCities.add(new SelectItem("Winnipeg")); manitobaCities.add(new SelectItem("Churchill")); ontarioCities = new ArrayList<SelectItem>(); ontarioCities.add(new SelectItem("Niagara Falls")); ontarioCities.add(new SelectItem("Niagara-on-the-Lake")); ontarioCities.add(new SelectItem("London")); ontarioCities.add(new SelectItem("Ottawa")); ontarioCities.add(new SelectItem("St. Catharines")); ontarioCities.add(new SelectItem("Stratford")); ontarioCities.add(new SelectItem("Toronto")); quebecCities = new ArrayList<SelectItem>(); quebecCities.add(new SelectItem("Montreal")); quebecCities.add(new SelectItem("Quebec City")); quebecCities.add(new SelectItem("Sherbrooke")); quebecCities.add(new SelectItem("Trois Rivi?res")); newfoundlandCities = new ArrayList<SelectItem>(); newfoundlandCities.add(new SelectItem("Corner Brook")); newfoundlandCities.add(new SelectItem("St. John's")); princeEdwardIslandCities = new ArrayList<SelectItem>(); princeEdwardIslandCities.add(new SelectItem("Cavendish")); princeEdwardIslandCities.add(new SelectItem("Charlottetown")); newBrunswickCities = new ArrayList<SelectItem>(); newBrunswickCities.add(new SelectItem("Fredericton")); newBrunswickCities.add(new SelectItem("Saint John")); novaScotiaCities = new ArrayList<SelectItem>(); novaScotiaCities.add(new SelectItem("Cape Breton")); novaScotiaCities.add(new SelectItem("Halifax")); yukonCities = new ArrayList<SelectItem>(); yukonCities.add(new SelectItem("Whitehorse")); northwestTerritoriesCities = new ArrayList<SelectItem>(); northwestTerritoriesCities.add(new SelectItem("Yellowknife")); nunavutCities = new ArrayList<SelectItem>(); nunavutCities.add(new SelectItem("Iqaluit")); provinceCitiesMap = new HashMap<String, List<SelectItem>>(); provinceCitiesMap.put("British Columbia", britishColumbiaCities); provinceCitiesMap.put("Alberta", albertaCities); provinceCitiesMap.put("Saskatchewan", saskatchewanCities); provinceCitiesMap.put("Manitoba", manitobaCities); provinceCitiesMap.put("Ontario", ontarioCities); provinceCitiesMap.put("Quebec", quebecCities); provinceCitiesMap.put("Newfoundland and Labrador", newfoundlandCities); provinceCitiesMap.put("Prince Edward Island", princeEdwardIslandCities); provinceCitiesMap.put("New Brunswick", newBrunswickCities); provinceCitiesMap.put("Nova Scotia", novaScotiaCities); provinceCitiesMap.put("Yukon", yukonCities); provinceCitiesMap.put("Northwest Territories", northwestTerritoriesCities); provinceCitiesMap.put("Nunavut", nunavutCities); } @PostConstruct public void initMetaData() { super.initMetaData(); } private String province = ""; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } private String city = ""; public String getCity() { return city; } public void setCity(String city) { this.city = city; } private List<SelectItem> cities = null; public List<SelectItem> getCities() { return cities; } public void setCities(List<SelectItem> cities) { this.cities = cities; } private boolean displayCities = false; public boolean getDisplayCities() { return displayCities; } public void setDisplayCities(boolean displayCities) { this.displayCities = displayCities; } public void provinceChange(ValueChangeEvent event) { Object value = event.getNewValue(); if (value != null) { List<SelectItem> cities = provinceCitiesMap.get(value.toString()); if (cities != null) { setCities(cities); setDisplayCities(true); setCity(null); return; } } setDisplayCities(false); } public void clearValues() { this.province = ""; this.city = ""; setDisplayCities(false); } }