sexta-feira, 1 de abril de 2016

Trabalhando com enum no JSF/Primefaces

      O JSF / Primefaces consegue trabalhar com enum de forma simples, sem precisarmos implementar conversores, basta passarmos para o componente uma lista com os valores da classe enum para o componente JSF / Primefaces. Segue o código do ManagedBean:

public class CadastroModeloCarroBean {
     
... //outros atributos da classe
      private List<Categoria> categorias;
           
      @PostConstruct
      public void init(){
            ... //outras inicializações necessárias
            categorias = Arrays.asList(Categoria.values());
      }
     
      ... //outros métodos da classe  
     
      public List<Categoria> getCategorias(){
            return categorias;
      }
     

}
         O atributo categorias trata-se de uma lista de itens da própria enum Categoria. Note que para pegar todos os atributos e devolve-los em forma de lista foi usado o seguinte código:

categorias = Arrays.asList(Categoria.values());

         Dessa forma eu posso usar a lista criada a partir do enum como qualquer outra lista. Veja no arquivo XHTML como fica:

<p:outputLabel value="Categoria" for="categoria"/>
<p:selectOneMenu id="categoria" value="#{cadastroModeloCarroBean.modeloCarro.categoria}">
     
<f:selectItem itemLabel="Selecione uma categoria"/>
     
<f:selectItems value="#{cadastroModeloCarroBean.categorias}" var="categoria" itemLabel="#{categoria}" itemValue="#{categoria}"/>

</p:selectOneMenu>

E olha o código da classe Categoria que é um enum:

public enum Categoria {
      
       SEDAN("Sedan"), HATCH("Hatch"), SUV("SUV");
      
       private String descricao;
      
       public String getDescricao(){
             return this.descricao;
       }
      
       private Categoria(String descricao){
             this.descricao = descricao;
       }

}

2 comentários: