Button/Link
Data
Input
Miscellaneous
Multimedia
Output
Panel
Select
JSTL
Faces Core
Facelets
Extensions

alloy:selectManyMenu

SelectManyMenu is a UISelectMany component that renders a select element and enables the user to select multiple values. It has the same basic features of alloy:selectManyListbox except that there is no size attribute because JSF "select*menu" components always render size=1. Since it extends HtmlSelectManyMenu, it supports all the features of h:selectManyMenu such as accepting f:selectItem or f:selectItems as child tags.

General Usage

The value attribute can be bound to a model bean property via EL.
Note: Chromium Issue#4579 may cause this component to display more than one menu item.

Source Code

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:alloy="http://liferay.com/faces/alloy"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<alloy:form>
<alloy:field label="#{i18n['favorite-liferay-benefit']}">
<alloy:selectManyMenu id="selectManyMenu"
required="#{showcaseModelBean.selectedComponent.required}"
value="#{selectManyModelBean.favoriteIds}">
<f:selectItem itemValue="#{null}" itemLabel="-- Select --" noSelectionOption="true" />
<f:selectItem itemLabel="Compatible" itemValue="1" />
<f:selectItem itemLabel="Enterprise Ready" itemValue="2" />
<f:selectItem itemLabel="Powerful Integration" itemValue="3" />
<f:selectItem itemLabel="Lightweight" itemValue="4" />
<f:selectItem itemLabel="Open Source" itemValue="5" />
</alloy:selectManyMenu>
<alloy:message for="selectManyMenu" />
</alloy:field>
<alloy:outputText escape="false" value="#{i18n['note-chromium-issue-4579']}" />
<hr />
<alloy:commandButton action="#{selectManyBackingBean.submit}" render="@form"
value="#{i18n['submit']}" />
<alloy:panelGroup id="modelValue">
<ui:repeat value="#{selectManyModelBean.favoriteIds}" var="favoriteId">
<alloy:outputText value="#{favoriteId}" /><br />
</ui:repeat>
</alloy:panelGroup>
</alloy:form>
</ui:composition>
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@ManagedBean
@RequestScoped
public class SelectManyModelBean {
private List<Long> favoriteIds;
private List<Long> benefitIds = Arrays.asList(2L, 4L);
private List<Date> dates;
private String phase;
@ManagedProperty(name = "liferayBenefitService", value = "#{liferayBenefitService}")
private LiferayBenefitService liferayBenefitService;
public List<Long> getBenefitIds() {
return benefitIds;
}
public List<Date> getDates() {
return dates;
}
public List<Long> getFavoriteIds() {
return favoriteIds;
}
public List<LiferayBenefit> getLiferayBenefits() {
return liferayBenefitService.getLiferayBenefits();
}
public String getPhase() {
return phase;
}
public void setBenefitIds(List<Long> benefitIds) {
this.benefitIds = benefitIds;
}
public void setDates(List<Date> dates) {
this.dates = dates;
}
public void setFavoriteIds(List<Long> favoriteIds) {
this.favoriteIds = favoriteIds;
}
public void setLiferayBenefitService(LiferayBenefitService liferayBenefitService) {
this.liferayBenefitService = liferayBenefitService;
}
public void setPhase(String phase) {
this.phase = phase;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@ManagedBean
@RequestScoped
public class SelectManyBackingBean {
private static final Logger logger = LoggerFactory.getLogger(SelectManyBackingBean.class);
@ManagedProperty(name = "selectManyModelBean", value = "#{selectManyModelBean}")
private SelectManyModelBean selectManyModelBean;
public void setSelectManyModelBean(SelectManyModelBean selectManyModelBean) {
this.selectManyModelBean = selectManyModelBean;
}
public void submit() {
PhaseId phaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();
logger.info("submit: phaseId=[{0}] favoriteId=[{1}]", phaseId.toString(), selectManyModelBean.getFavoriteIds());
}
public void submitAnswer() {
List<Date> selectedDates = selectManyModelBean.getDates();
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
boolean correct = (selectedDates.size() > 0);
for (Date selectedDate : selectedDates) {
Calendar calendar = new GregorianCalendar(gmtTimeZone);
calendar.setTime(selectedDate);
int selectedYear = calendar.get(Calendar.YEAR);
if ((selectedYear <= 1700) || (selectedYear > 1800)) {
correct = false;
break;
}
}
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage;
if (correct) {
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);
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Liferay Faces Alloy 4.1.1 + Liferay Faces Bridge Implementation 5.0.0 + Showcase Common 4.0.0 + Liferay Faces Util 3.4.1 + Mojarra 2.2.20