JSF 2.0 – selectItems con enum

Goal: aggiungere in una pagina JSF – Facelts un selectOneRadio che prenda i valori da un enum.

public enum PersonGender {
  M("Male"),
  F("Female");
  private String description;
  private PersonGender(String description) {
   this.description = description;
  }
  public String getDescription() {
   return description;
  }
  public void setDescription(String description) {
   this.description = description;
  }
 }

Per poter visualizzare i valori nella pagina, è necessario un bean che esponga un metodo che torni il .values() dell’enum.

Ho creato un bean di sessione generico, in modo che possa essere riusato da diverse pagine e per diversi enum:

@ManagedBean
@SessionScoped
public class EnumCollectorBean {
public PersonGender[] getPersonGenderValues() {
 return PersonGender.values();
}
}

Ora si può aggiungere il riferimento al metodo getPersonGenderValues nella pagina:

si può mettere un riferimento di tipo immediate ${} (valutato al primo render della pagina) trattandosi di valori costanti.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core">

<ui:composition template="/WEB-INF/templates/BasicTemplate.xhtml">
 <ui:define name="content">
  <h:outputLabel value="Hell-O #{loginBean.name}"></h:outputLabel>
  <br />
  <br />
  <h:panelGroup>
   <h:outputLabel value="Please, insert more information about you" />
    <h:panelGrid columns="2">
     <h:outputLabel value="Gender" />
     <h:selectOneRadio id="gender" value="##{loginBean.person.gender}">
      <f:selectItems value="${enumCollectorBean.personGenderValues}" var="g" 
       itemLabel="#{g.description}" />
     </h:selectOneRadio>
     <h:outputLabel value="Address" />
     <h:inputTextarea value="#{loginBean.person.address}" />
     <h:outputLabel value="Phone Number" />
     <h:inputText value="#{loginBean.person.phoneNumber}" />
    </h:panelGrid>
   </h:panelGroup>
  </ui:define>
 </ui:composition>
</html>
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...