JSF - Lista com os dados vindos de um Enun, como eu faco?

Ola pessoal

eu tenho um enun com essa estrutura

[code]public enum ContatoTipo {

INICIO(0),

RESIDENCIA(1),

TRABALHO(2),

FIM(3);

private int contatoTipoID;

ContatoTipo(int value) {  
	this.contatoTipoID = value;  
}  

public int contatoTipoID() {  
	return this.contatoTipoID;  
}     

}[/code]

agora, como eu faco para criar um campo select passando os dados desse enum para o select?

ficando dessa forma

<select name="select" id="select">
  <option value="0">""</option>
  <option value="1">RESIDENCIA</option>
  <option value="2">TRABALHO</option>
</select>

abs
obrigado

Vc vai ter que criar algum método no enum que retorne
um List e associar esse campo ao componente da tela.

<h:selectOneMenu name="select" id="select"> <f:selectItems value="#{bean.listaContato}" /> </h:selectOneMenu>

[quote=maurenginaldo]Vc vai ter que criar algum método no enum que retorne
um List e associar esse campo ao componente da tela.

<h:selectOneMenu name="select" id="select"> <f:selectItems value="#{bean.listaContato}" /> </h:selectOneMenu>
[/quote]

ola
tentei fazer isso, porem, eu nao consegui
veja como deixei o Enun

[code]package br.com.krusst.precadastro.beans;

import java.util.ArrayList;
import java.util.List;

public enum ContatoTipo {

INICIO(0,""),

RESIDENCIA(1,"Residencial"),

TRABALHO(2,"Trabalho"),

FIM(3,"");

private int contatoTipoID;
private String contatoTipoDescr;    

ContatoTipo(int contatoTipoID, String contatoTipoDescr) {  
	this.contatoTipoID = contatoTipoID;  
	this.contatoTipoDescr = contatoTipoDescr;
}  

ContatoTipo(int contatoTipoID) {  
	this.contatoTipoID = contatoTipoID;  
}  

ContatoTipo(String contatoTipoDescr) {  
	this.contatoTipoDescr = contatoTipoDescr;  
}  	

public int contatoTipoID() {  
	return this.contatoTipoID;  
}     

public String contatoTipoDescr() {  
	return this.contatoTipoDescr;  
}  	

public List contatoTipoLista(ArrayList contatoTipoLista){

	while(INICIO.contatoTipoID < FIM.contatoTipoID){
		contatoTipoLista.add(ContatoTipo.values());
	}
	return contatoTipoLista;
	
}

}[/code]

mas acho que

[code] public List contatoTipoLista(ArrayList contatoTipoLista){

	while(INICIO.contatoTipoID < FIM.contatoTipoID){
		contatoTipoLista.add(ContatoTipo.values());
	}
	return contatoTipoLista;
	
}

[/code]

nao é a forma certa de conseguir todos os dados?
como seria a forma certa?
e como eu pegaria esses valores posteriormente?

obrigado
abs

Crie os get’s e os set’s de suas propriedades do enum:

[code] private int contatoTipoID;
private String contatoTipoDescr;

// gest’s e set’s

[/code]

O código abaixo recebe uma classe e retorna um list de SelectItem para vc usar na tela.

[code]public static List getSelectItemList(Class<?> classe) {
List selectItemList = new ArrayList();
Field[] fields = classe.getDeclaredFields();
for(Field field : fields){
StringTokenizer valor = new StringTokenizer(field.get("").toString());
Byte value = Byte.parseByte(valor.nextToken("-"));
String label = valor.nextToken("-");
selectItemList.add(new SelectItem(value,label));
}

	return selectItemList;
}[/code]

Testa aí.

[quote=maurenginaldo]
Crie os get’s e os set’s de suas propriedades do enum:

[code] private int contatoTipoID;
private String contatoTipoDescr;

// gest’s e set’s

[/code]

O código abaixo recebe uma classe e retorna um list de SelectItem para vc usar na tela.

[code]public static List getSelectItemList(Class<?> classe) {
List selectItemList = new ArrayList();
Field[] fields = classe.getDeclaredFields();
for(Field field : fields){
StringTokenizer valor = new StringTokenizer(field.get("").toString());
Byte value = Byte.parseByte(valor.nextToken("-"));
String label = valor.nextToken("-");
selectItemList.add(new SelectItem(value,label));
}

	return selectItemList;
}[/code]

Testa aí.[/quote]

cara, desculpe que sou bem leigo nesse caso

o enun ficaria assim com os get e set?

[code]package br.com.krusst.precadastro.beans;

import java.util.ArrayList;
import java.util.List;

public enum ContatoTipo {

INICIO(0,""),

RESIDENCIA(1,"Residencial"),

TRABALHO(2,"Trabalho"),

FIM(3,"");

private int contatoTipoID;
private String contatoTipoDescr;    

ContatoTipo(int contatoTipoID, String contatoTipoDescr) {  
	this.contatoTipoID = contatoTipoID;  
	this.contatoTipoDescr = contatoTipoDescr;
}  

ContatoTipo(int contatoTipoID) {  
	this.contatoTipoID = contatoTipoID;  
}  

ContatoTipo(String contatoTipoDescr) {  
	this.contatoTipoDescr = contatoTipoDescr;  
}  	

public int contatoTipoID() {  
	return this.contatoTipoID;  
}     

public String contatoTipoDescr() {  
	return this.contatoTipoDescr;  
}  	

public int getContatoTipoID() {
	return contatoTipoID;
}

public void setContatoTipoID(int contatoTipoID) {
	this.contatoTipoID = contatoTipoID;
}

public String getContatoTipoDescr() {
	return contatoTipoDescr;
}

public void setContatoTipoDescr(String contatoTipoDescr) {
	this.contatoTipoDescr = contatoTipoDescr;
}

}
[/code]

na parte

[code]# public static List getSelectItemList(Class<?> classe) {

List selectItemList = new ArrayList();

Field[] fields = classe.getDeclaredFields();

for(Field field : fields){

StringTokenizer valor = new StringTokenizer(field.get("").toString());

Byte value = Byte.parseByte(valor.nextToken("-"));

String label = valor.nextToken("-");

selectItemList.add(new SelectItem(value,label));

}

return selectItemList;

}[/code]

onde ficaria esse codigo?
na classe do enun, numa classe nova[utilitaria por exemplo]?

obrigado
abs

maurenginaldo
fui fucando daqui e dali e consegui fazer isso(que nao sei se é o correto pois estou tendo erros)

no enum ContatoTipo

[code] public static List getSelectItemList(Class<?> classe) throws IllegalArgumentException, IllegalAccessException {
List selectItemList = new ArrayList();
Field[] fields = classe.getDeclaredFields();
for(Field field : fields){
StringTokenizer valor = new StringTokenizer(field.get("").toString());
Byte value = Byte.parseByte(valor.nextToken("-"));
String label = valor.nextToken("-");
selectItemList.add(new SelectItem(value,label));
}

     return selectItemList;  
 }	

 public static List<SelectItem> listaContatoTipo() throws IllegalArgumentException, IllegalAccessException{
	 return getSelectItemList(ContatoTipo.class);
 }[/code]

qdo executo a pagina, ela me retorna o seguinte erro

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: br.com.krusst.precadastro.beans.ContatoTipo
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)


root cause 

java.lang.InstantiationException: br.com.krusst.precadastro.beans.ContatoTipo
	java.lang.Class.newInstance0(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	java.beans.Beans.instantiate(Unknown Source)
	java.beans.Beans.instantiate(Unknown Source)
	com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:310)
	com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:542)
	com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:83)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:58)
	org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:45)
	org.apache.el.parser.AstValue.getValue(AstValue.java:86)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
	javax.faces.component.UISelectItems.getValue(UISelectItems.java:132)
	com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:308)
	com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:506)
	com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:482)
	com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:447)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:847)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:893)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:827)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:883)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:889)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:258)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:108)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:159)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)

o meu faces-config esta assim


<?xml version='1.0' encoding='UTF-8'?>

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
	<managed-bean>
		<managed-bean-name>pessoa</managed-bean-name>
		<managed-bean-class>br.com.krusst.precadastro.beans.Pessoa</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
	
	<managed-bean>
		<managed-bean-name>contatoTipo</managed-bean-name>
		<managed-bean-class>br.com.krusst.precadastro.beans.ContatoTipo</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>	
	
		
<navigation-rule>
		<from-view-id>/jsp/pessoacadastro.jsp</from-view-id>
		<navigation-case>
			<from-outcome>sucesso</from-outcome>
			<to-view-id>/jsp/pessoacadastroview.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>	

</faces-config>

oq pode ser esse erro?
oq estou fazendo de errado?

abs

Olá!!
Ontem mesmo estava precisando de mostrar os valores do Enum com JSF e quebrando um pouco a cabeça cheguei nisso:

    public Map getEstados() {
        Map&lt;Estados, String&gt; est = new HashMap&lt;Estados, String&gt;();        
        for (Estados type : Estados.values()) {
            est.put(type, type.name());
        }        
        return est;
    }

Onde tenho um Enum de estados ex:(SP, São Paulo) e assim passando um Map para o JSF:

&lt;h:selectOneMenu id="estado"&gt;
     &lt;f:selectItems value="#{EmpresaMB.estados}" /&gt;
&lt;/h:selectOneMenu&gt;

Ve se te ajuda :wink:

[quote=Granella]Olá!!
Ontem mesmo estava precisando de mostrar os valores do Enum com JSF e quebrando um pouco a cabeça cheguei nisso:

    public Map getEstados() {
        Map&lt;Estados, String&gt; est = new HashMap&lt;Estados, String&gt;();        
        for (Estados type : Estados.values()) {
            est.put(type, type.name());
        }        
        return est;
    }

Onde tenho um Enum de estados ex:(SP, São Paulo) e assim passando um Map para o JSF:

&lt;h:selectOneMenu id="estado"&gt;
     &lt;f:selectItems value="#{EmpresaMB.estados}" /&gt;
&lt;/h:selectOneMenu&gt;

Ve se te ajuda :wink: [/quote]

ja é um outro modo de criar
vou testar
porem, vc podia me postar o seu Enun, acho que se chama Estado, nao é?
se puder, serei grato
T+
abs

grugru
to ficando doido

fucei e fucei na net
achei alguns meios de puxar os dados…
porem, eu tenho recebido o seguinte erro

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: /jsp/pessoacadastro.jsp(32,11) '#{pessoa.getContatoTipoXTest}' Property 'getContatoTipoXTest' not found on type br.com.krusst.precadastro.beans.Pessoa
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)


root cause 

org.apache.jasper.el.JspPropertyNotFoundException: /jsp/pessoacadastro.jsp(32,11) '#{pessoa.getContatoTipoXTest}' Property 'getContatoTipoXTest' not found on type br.com.krusst.precadastro.beans.Pessoa
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:104)
	javax.faces.component.UISelectItems.getValue(UISelectItems.java:132)
	com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:308)
	com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:506)
	com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:482)
	com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:447)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:847)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:893)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:827)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:883)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:889)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:258)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:108)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:159)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)


veja os teste que usei,e todos me retornam o mesmo erro

	 public ArrayList<SelectItem> getComboTipoPessoa(){    
          ArrayList<SelectItem> cli = new ArrayList();  
          List<SelectItem> list;
          cli.add( new SelectItem( 1,"Fisica"));
          cli.add( new SelectItem( 2,"Juridica"));	 
          return cli;
        } 
         
 public ArrayList<SelectItem> getListarFormaPagamento() {  
    ArrayList<SelectItem> listaSelect = new ArrayList<SelectItem>();  
    listaSelect.add(new SelectItem(1,"teste1"));  
    listaSelect.add(new SelectItem(2,"teste2"));      
    return listaSelect;  
 }

  public ArrayList<SelectItem> getListarEstado() {  
    ArrayList<SelectItem> listaSelect = new ArrayList<SelectItem>();  
         SelectItem estado1 = new SelectItem();  
         estado1.setLabel("Paran");  
         estado1.setValue(1);  
           
         SelectItem estado2 = new SelectItem();  
         estado2.setLabel("Sao Paulo");  
         estado2.setValue(2);  
           
         SelectItem estado3 = new SelectItem();  
         estado3.setLabel("Rio de Janeiro");  
         estado3.setValue(3);      

         listaSelect.add(estado1);
         listaSelect.add(estado2);
         listaSelect.add(estado3);         
    return listaSelect;  
 }

  
	  public Map getContatoTipoXTest() {  
		  Map<ContatoTipo, String> est = new HashMap<ContatoTipo, String>();          
		  	for (ContatoTipo type : ContatoTipo.values()) {  
		  		est.put(type, type.name());  
		  	}          
		  	return est;  
	  }

minha pagina jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>teste faces</title>
		<link href="../css/css_azul.css" rel="stylesheet" type="text/css">
		<link href="../css/css_azul_form.css" rel="stylesheet" type="text/css">
		<link href="../css/css_azul_tbl.css" rel="stylesheet" type="text/css">		        
    </head>
    <body>
<h:form id="form">   
<div class="ContainerForm">
	
	<span class="TituloBarraEsq">&nbsp;</span>
  	<span class="TituloBarra"><h1>Cadastro de Pessoa</h1></span>
	<span class="TituloBarraDir">&nbsp;</span>

		<fieldset>
			
          	<span style="width:720px">	<label for="PessID"> Codigo de Pessoa </label> <h:inputText value="#{pessoa.id}" id="id" maxlength="5" size="5"><f:validateDoubleRange minimum="0" /></h:inputText>
                                        <input name="PessIDBsc" type="button" class="Botao" id="PessIDBsc" value="Buscar Pessoa &raquo;" onClick="popAbrir('pess_empr_pop.asp','PessID&PessSttID=3')" >
			</span>

        	<input type="hidden" id="Confirmacao" name="Confirmacao">
			<span style="width:35px">	<label for="PessNome">Nome</label></span>
			<span style="width:270px">	<h:inputText value="#{pessoa.nome}" id="nome" maxlength="50" size="50" required="true"><f:validateLength maximum="50" minimum="5"/></h:inputText></span>
			<span style="width:40px">	<label for="PessTipID">Pessoa</label></span>
			<span style="width:65px">	<h:selectOneMenu id="contatoTipoX">
											<f:selectItems value="#{pessoa.getContatoTipoXTest}"/>											
            							</h:selectOneMenu>
			</span>
            <span style="width:60px">	<label for="PessDoc">CPF/CNPJ</label></span>
        	<span style="width:260px">	<input name="PessDoc" type="text" class="FormCampo" id="PessDoc" size="21" maxlength="20">
        	</span>
        	
        	<span style="width:720px"><h:commandButton value="Cadastrar" action="#{pessoa.cadastrar}"></h:commandButton></span>
        	<span style="width:720px"><h:messages errorClass="Erro"></h:messages></span>        	
		</fieldset>
        
        <span style="width:730px"><div id="Erro"></div></span>            
</div>
</h:form>
</body>
</html>
</f:view>

oq pode ser?
ja fucei em tudo qto é lugar e nada ate agora

abs
T+

Claro! ai esta ele:

package com.fef.tcc.beans;

import java.util.List;

/**
 *
 * @author Fagner Granella
 */
public enum Estados {

    AC("Acre"),
    AL("Alagoas"),
    AM("Amazonas"),
    AP("Amapá"),
    BA("Bahia"),
    CE("Ceará"),
    DF("Distrito Federal"),
    ES("Espirito Santo"),
    GO("Goias"),
    MA("Maranhão"),
    MG("Minas Gerais"),
    MS("Mato Grosso Sul"),
    MT("Mato Grosso"),
    PA("Pará"),
    PB("Paraiba"),
    PE("Pernanbuco"),
    PI("Piaui"),
    PR("Parana"),
    RJ("Rio de Janeiro"),
    RN("Rio Grande do Norte"),
    RO("Rondônia"),
    RR("Roraima"),
    RS("Rio Grande do Sul"),
    SC("Santa Catarina"),
    SE("Sergipe"),
    SP("São Paulo"),
    TO("Tocantins");
    private String estado;

    Estados(String estado) {
        this.estado = estado;
    }

    public String getEstado() {
        return estado;
    }

    @Override
    public String toString() {
        return estado;
    }
}

É para o TCC que estou fazendo. Um sistema de contabilidade e esse Enum é da localização da Empresa que esta
anotado na mesmo como:

@Enumerated(EnumType.STRING) @Column(name = "EMPUF", length = 2) private Estados uf;
Observando agora vi que utilizei um HasMap :lol: a lista vai estar toda desordenada hehe Ohh correria :smiley:

valeu Granella

porem, ainda tenho o mesmo problema

ainda tenho aquela msg de erro

nao entendi ate agora oq pode ser esse Property que ele nao encontra

obrigado pela ajuda
T+

O seu erro Property ‘getContatoTipoXTest’ not found on type br.com.krusst.precadastro.beans.Pessoa é que não existe uma propriedade chamada getContatoTipoXTest…
exemplo:
Coloque uma propriedade: private Map estados e la no .xhtml, .jsp como queira chame <f:selectItems value="#{EmpresaMB.estados}" /> vc chama uma propriedade e não um metodo oK?!

[quote=Granella]O seu erro Property ‘getContatoTipoXTest’ not found on type br.com.krusst.precadastro.beans.Pessoa é que não existe uma propriedade chamada getContatoTipoXTest…
exemplo:
Coloque uma propriedade: private Map estados e la no .xhtml, .jsp como queira chame <f:selectItems value="#{EmpresaMB.estados}" /> vc chama uma propriedade e não um metodo oK?![/quote]

ai que ta o problema

ele existe!
agora nao entendo pq ele nao o encontra

e esta passando pela classe, pq fiz uns testes no GETs e SETs e eles modificam o valor

seu eu tirar a parte do menu, funciona normal, vou e volto com os dados, porem, se coloco, ele me da esse erro
e como vc pode ser no codigo, existe esse metodo
so nao entendo pq ele nao o encontra

mas qdo li o erro, eu entendi que ele nao encontras as propriedados do resultado, tipo, saber pra onde que ele manda a informacao
eu estava pensando que era isso! :s

valeu
abs
T+

Revivendo este tópico…
Encontrei diversos posts sobre enums (a maioria tratava o mesmo assunto), mas não encontrei nada referente à um problema simples que estou tendo: Como internacionalizar um Enum em JSF. Por exemplo:

public enum Sex {
    MALE, FEMALE;
}

Tentei colocar no message.properties o seguinte, Sex.MALE=Masculino, mas não funcionou…
Alguma sugestão :?: