JSF'de bir sayfada enum değerlerini bir SelectOneMenu bileşenine yükleyebilirsiniz. Enum aşağıdaki gibi olsun:
public enum Test {
ITEM1,
ITEM2,
ITEM3;
}
Bu enum kullanıldığı bean aşağıdaki gibi olsun :
import javax.faces.bean.ManagedBean;
import javax.faces.model.SelectItem;
@ManagedBean
public class EnumBean {
private Test selected;
public Test[] getEnums(){
return Test.values();
}
public SelectItem[] getEnumsAsSelectItem() {
SelectItem[] items = new SelectItem[Test.values().length];
int i = 0;
for(Test t: Test.values()) {
items[i++] = new SelectItem(t, t.toString());
}
return items;
}
public String submit(){
System.out.println("selected value : " + selected);
return "";
}
public Test getSelected() {
return selected;
}
public void setSelected(Test selected) {
this.selected = selected;
}
}
getEnums() ile Enum değeleri dizi olarak verilmektedir. İstenirse getEnumsAsSelectItem() ile de SelectItem listesi olarak alınabilir.
Form aşağıdaki gibidir :
<h:form>
<h3>Enum Test 3</h3>
<h:selectOneMenu value="#{enumBean.selected}">
<f:selectItems value="#{enumBean.enums}"></f:selectItems>
</h:selectOneMenu>
<h:commandButton action="#{enumBean.submit}" value="Submit"></h:commandButton>
</h:form>
Submit düğmesine basıldığında console'de basılan elementin değeri gösterilir.
Enum'da title gibi bir başka özellik olabilir:
public enum Test {
ITEM1("item 1"),
ITEM2("item 2"),
ITEM3("item 3");
String title;
Test(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Eğer açılır listede title değerini göstermek istiyorsanız sayfada aşağıdaki gibi değişiklik yapabilirsiniz:
<h:selectOneMenu value="#{enumBean.selected}">
<f:selectItems value="#{enumBean.enums}"
var="t" itemLabel="#{t.title}" itemValue="#{t}"></f:selectItems>
</h:selectOneMenu>
Sayfada artık title alanı gözükecek , value olarak da enum'un kendisi kullanılacaktır.