JSF Showcase
h:selectOneMenu
HtmlSelectOneMenu is a UISelectOne component that renders aselect
element (drop down list) and enables the user to select one value.
Data Model Usage
The component will display dynamically when the value attribute of the child f:selectItems tag is bound via EL to a model bean property (which is wrapped implicitly by JSF with a DataModel). The var attribute of the child f:selectItems tag is used to introduce a variable name into the EL when iterating over the model.Source Code
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> <h:form> <h:outputLabel value="#{i18n['favorite-liferay-benefit']}" /> <h:selectOneMenu id="selectOneMenu" value="#{selectOneModelBean.favoriteId}"> <f:selectItems value="#{selectOneModelBean.liferayBenefits}" var="benefit" itemValue="#{benefit.id}" itemLabel="#{benefit.label}" /> </h:selectOneMenu> <hr /> <h:commandButton action="#{selectOneBackingBean.submit}" value="#{i18n['submit']}"> <f:ajax execute="@form" render="@form" /> </h:commandButton> <h:outputText id="modelValue" value="#{selectOneModelBean.favoriteId}" /> </h:form> </ui:composition>
@ManagedBean @RequestScoped public class SelectOneModelBean { private Long favoriteId; private Long benefitId = 3L; private Date date; private String phase; @ManagedProperty(name = "liferayBenefitService", value = "#{liferayBenefitService}") private LiferayBenefitService liferayBenefitService; public Long getBenefitId() { return benefitId; } public Date getDate() { return date; } public Long getFavoriteId() { return favoriteId; } public List<LiferayBenefit> getLiferayBenefits() { return liferayBenefitService.getLiferayBenefits(); } public String getPhase() { return phase; } public void setBenefitId(Long benefitId) { this.benefitId = benefitId; } public void setDate(Date date) { this.date = date; } public void setFavoriteId(Long favoriteId) { this.favoriteId = favoriteId; } public void setLiferayBenefitService(LiferayBenefitService liferayBenefitService) { this.liferayBenefitService = liferayBenefitService; } public void setPhase(String phase) { this.phase = phase; } }
@ManagedBean @RequestScoped public class SelectOneBackingBean { private static final Logger logger = LoggerFactory.getLogger(SelectOneBackingBean.class); @ManagedProperty(name = "selectOneModelBean", value = "#{selectOneModelBean}") private SelectOneModelBean selectOneModelBean; public SelectItem[] getSelectItems() { SelectItem[] selectItems = new SelectItem[3]; for (int i = 0; i < 3; i++) { SelectItem item = new SelectItem(); item.setLabel("Item " + (i + 1)); item.setValue(i + 1); selectItems[i] = item; } return selectItems; } public void setSelectOneModelBean(SelectOneModelBean selectOneModelBean) { this.selectOneModelBean = selectOneModelBean; } public void submit() { PhaseId phaseId = FacesContext.getCurrentInstance().getCurrentPhaseId(); logger.info("submit: phaseId=[{0}] favoriteId=[{1}]", phaseId.toString(), selectOneModelBean.getFavoriteId()); } public void submitAnswer() { Date selectedDate = selectOneModelBean.getDate(); TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT"); Calendar calendar = new GregorianCalendar(gmtTimeZone); if (selectedDate != null) { calendar.setTime(selectedDate); } FacesContext facesContext = FacesContext.getCurrentInstance(); FacesMessage facesMessage; if ((selectedDate != null) && (calendar.get(Calendar.MONTH) == 6) && (calendar.get(Calendar.DATE) == 4) && (calendar.get(Calendar.YEAR) == 1776)) { facesMessage = new FacesMessage("Correct!"); facesMessage.setSeverity(FacesMessage.SEVERITY_INFO); } else { facesMessage = new FacesMessage("Incorrect!"); facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR); } facesContext.addMessage(null, facesMessage); } public void valueChangeListener(ValueChangeEvent valueChangeEvent) { FacesContext facesContext = FacesContext.getCurrentInstance(); PhaseId phaseId = facesContext.getCurrentPhaseId(); logger.debug("valueChangeListener: phaseId=[{0}]", phaseId.toString()); String phaseName = phaseId.toString(); FacesMessage facesMessage = new FacesMessage("The valueChangeListener method was called during the " + phaseName + " phase of the JSF lifecycle."); facesContext.addMessage(null, facesMessage); } }
Liferay Faces Bridge Implementation 5.0.0 + Showcase Common 3.1.1 + Liferay Faces Util 3.4.1 + Mojarra 2.2.20