ola pessoal
eu tenho as seguintes classes
Email
package br.com.krusst.precadastro.bean;
public class Email {
private int id;
private String descr;
private ContatoTipo tipoId;
public Email() {
super();
}
public Email(int id, String descr, ContatoTipo tipoId) {
super();
this.id = id;
this.descr = descr;
this.tipoId = tipoId;
}
public int getId() {
return id;
}
public String getDescr() {
return descr;
}
public ContatoTipo getTipoId() {
return tipoId;
}
public void setId(int id) {
this.id = id;
}
public void setDescr(String descr) {
this.descr = descr;
}
public void setTipoId(ContatoTipo tipoId) {
this.tipoId = tipoId;
}
public void setEmailLimpa() {
this.id = 0;
this.descr = "";
this.tipoId = ContatoTipo.INICIO;
}
}
TipoContato
package br.com.krusst.precadastro.bean;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.faces.model.SelectItem;
public enum ContatoTipo implements Serializable{
INICIO(0,"",0),
RESIDENCIA(1,"Residencial",1),
COMERCIAL(2,"Comercial",0),
CELULAR(3,"Celular",1),
PESSOAL(4,"Pessoal",2),
FIM(5,"",1);
private int id;
private String descr;
private int tipo;
private static Map<String, ContatoTipo> listaContatoTipoId;
private static Map<String, ContatoTipo> listaContatoTipoDescr;
static {
listaContatoTipoId = new HashMap<String, ContatoTipo>();
//Preencho a lista com o ID e o valor do Enum
for(ContatoTipo s : values()){listaContatoTipoId.put(Integer.toString(s.getId()), s);}
listaContatoTipoDescr = new HashMap<String, ContatoTipo>();
//Preencho a lista com o ID e o valor do Enum
for(ContatoTipo s : values()){listaContatoTipoDescr.put(s.getDescr(), s);}
}
ContatoTipo() {
}
ContatoTipo(int id, String descr, int tipo) {
this.id = id;
this.descr = descr;
this.tipo = tipo;
}
public int id() {
return this.id;
}
public String descr() {
return this.descr;
}
public int getId() {
return id;
}
public String getDescr() {
return descr;
}
public void setID(int id) {
this.id = id;
}
public void setDescr(String descr) {
this.descr = descr;
}
public int getTipo() {
return tipo;
}
public void setId(int id) {
this.id = id;
}
public void setTipo(int tipo) {
this.tipo = tipo;
}
public static Map<String, ContatoTipo> getListaContatoTipoId() {
return listaContatoTipoId;
}
public static Map<String, ContatoTipo> getListaContatoTipoDescr() {
return listaContatoTipoDescr;
}
public static void setListaContatoTipoId(Map<String, ContatoTipo> listaContatoTipoId) {
ContatoTipo.listaContatoTipoId = listaContatoTipoId;
}
public static void setListaContatoTipoDescr(Map<String, ContatoTipo> listaContatoTipoDescr) {
ContatoTipo.listaContatoTipoDescr = listaContatoTipoDescr;
}
public static ContatoTipo getContatoTipoPorDescr(String descr) {
return listaContatoTipoDescr.get(descr);
}
public static ContatoTipo getContatoTipoPorId(String id) {
return listaContatoTipoId.get(id);
}
}
PessoaFisica
...
//tive que deixar essa funcao na PessoaFisica, pois quando coloco ela na enum TipoCOntato, me gera erro
public Map getContatoTipoEmailLista() {
//Map<String, ContatoTipo> est = new HashMap<String, ContatoTipo>();
Map<String, String> est = new HashMap<String, String>();
//ENQUANTO EXISTIR VALOR NO ENUM, ELE LISTA
for (ContatoTipo type : ContatoTipo.values()) {
//POR **, TODO ENUM TERMINA EM "FIM", ENTAO QUANDO ENCONTRAR "FIM", ELE SAI DO LOOP
if (type == ContatoTipo.FIM){break;};
if (type.getTipo()!=1){
est.put(type.getDescr(),Integer.toString(type.getId()));
}
}
return est;
}
...
pagina.jsp
...
<h:selectOneMenu id="emailTipoId1" value="#{pessoaFisicaMB.pessoaFisica.email1.tipoId}">
<f:selectItems value="#{pessoaFisicaMB.pessoaFisica.contatoTipoEmailLista}"/>
</h:selectOneMenu>
...
desta forma, qdo eu submeto o formulario, eu tenho o seguinte erro
form:emailTipoId1: '0' must be convertible to an enum from the enum that contains the constant 'FIM'.
form:emailTipoId2: '0' must be convertible to an enum from the enum that contains the constant 'FIM'.
sei que o erro é por que eu estou passando um inteiro para o enum, porem, como eu faco essa conversao?
eu tenho o metodo “getContatoTipoPorId” que retorna o enum, porem, eu nao consegue utilizar ele pra fazer a conversao
tente fazer isso
...
<h:selectOneMenu id="emailTipoId1" value="#{pessoaFisicaMB.pessoaFisica.email1.tipoId}">
<f:selectItems value="#{pessoaFisicaMB.pessoaFisica.contatoTipoEmailLista}"/>
<f:converter converterId="#{pessoaFisicaMB.pessoaFisica.email1.tipoId.contatoTipoPorId}" />
</h:selectOneMenu>
...
mas da erro
como eu faco essa conversao?
obs.:isso funcionava antigamente qdo eu usava o ENUm como value, porem, por causa da validacao no Front-end em JS, eu preciso deixar com o Numero mesmo como value.
abs
T+