ola pessoal
eu tenho as seguintes classes
sexo
package br.com.krusst.precadastro.beans;
public enum Sexo {
INICIO(0,""),
MASCULINO(1,"M"),
FEMININO(2,"F"),
FIM(3,"");
private int id;
private String descr;
private Sexo() {
}
private Sexo(int id, String descr) {
this.id = id;
this.descr = 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;
}
}
PessoaFisica
package br.com.krusst.precadastro.beans;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.faces.model.SelectItem;
import java.sql.*;
import br.com.krusst.precadastro.beans.CursoSuperior;
import br.com.krusst.precadastro.beans.Escolaridade;
import br.com.krusst.precadastro.beans.EstadoCivil;
import br.com.krusst.precadastro.beans.Sexo;
import br.com.krusst.precadastro.database.GerenciadorConexao;
import br.com.krusst.precadastro.util.KrusstException;
public class PessoaFisica extends Pessoa {
private static final long serialVersionUID = 1094580938504390L;
private EstadoCivil estadoCivil;
private Escolaridade escolaridade;
private CursoSuperior cursoSuperior;
private int profissao;
private Sexo sexo;
public PessoaFisica() {
}
public PessoaFisica(EstadoCivil estadoCivil, Escolaridade escolaridade, CursoSuperior cursoSuperior, int profissao, Sexo sexo) {
super();
this.estadoCivil = estadoCivil;
this.escolaridade = escolaridade;
this.cursoSuperior = cursoSuperior;
this.profissao = profissao;
this.sexo = sexo;
}
public EstadoCivil getEstadoCivil() {
return estadoCivil;
}
public void setEstadoCivil(EstadoCivil estadoCivil) {
this.estadoCivil = estadoCivil;
}
public Escolaridade getEscolaridade() {
return escolaridade;
}
public void setEscolaridade(Escolaridade escolaridade) {
this.escolaridade = escolaridade;
}
public CursoSuperior getCursoSuperior() {
return cursoSuperior;
}
public void setCursoSuperior(CursoSuperior cursoSuperior) {
this.cursoSuperior = cursoSuperior;
}
public int getProfissao() {
return profissao;
}
public void setProfissao(int profissao) {
this.profissao = profissao;
}
public Sexo getSexo() {
return sexo;
}
public void setSexo(Sexo sexo) {
this.sexo = sexo;
}
public PessoaFisica getPessoaFisica(){
PessoaFisica pess = new PessoaFisica();
pess.setNome(getNome());
return pess;
}
public Map getSexoLista() {
Map<String, String> est = new HashMap<String, String>();
//ENQUANTO EXISTIR VALOR NO ENUM, ELE LISTA
for (Sexo type : Sexo.values()) {
//POR **, TODO ENUM TERMINA EM "FIM", ENTAO QUANDO ENCONTRAR "FIM", ELE SAI DO LOOP
if (type == Sexo.FIM){break;};
//est.put(type.getDescr(),Integer.toString(type.getId()));
est.put(type.getDescr(),type.toString());
}
return est;
}
}
eo seguinte trexo de codigo na pagina jsp
cadastropessoa.jsp
<h:selectOneMenu id="pessoaSexoID" value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo}">
<f:selectItems value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexoLista}"/>
</h:selectOneMenu>
problemas que estou tendo
1- o lugar da metodo getSexoLista()
eu coloco ele dentro do enum sexo e faco referença nas classes, ate ai, funciona direito, porem, qdo vou usar no jsp, ele me da erro, dizendo que nao encontra o metodo
getSexoLista()
<f:selectItems value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo.sexoLista}"/>
a forma que eu tentei usar e nao consegui
<h:selectOneMenu id="pessoaSexoID" value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo}">
<f:selectItems value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo.sexoLista}"/>
</h:selectOneMenu>
pq eu estou tendo esse erro?
pensei em deixar ele “desmembrado” da classe PessoaFisica, e configurar no faces-config em managedBeam para a classe sexo, porem, isso é considerado um POG?
2-ai criar a lista usando o metodo getSexoLista(), eu usava a seguinte linha
est.put(type.getDescr(),Integer.toString(type.getId()));
e dessa forma ele me retornava da forma que eu queria os dados
0-
1-m
2-f
porem, qdo uso dessa forma, qdo vou fazer o cadastro, tenho o a seguinte mensagem de erro do JSF
form:sexoid: ‘1’ must be convert a enum
eu entendi o pq do erro, porem, eu nao sei como consertar
para “consertar” eu mudei a linha que anterior para
est.put(type.getDescr(),type.toString());
e dessa forma funciona, porem, eu tenho um retorno de dados “errado”
INICIO-
MASCULINO-1
FEMININO-2
a principio, isso nao seria um problema, porem, eu tenho enum, com quantidades bem maiores de informacoes, e qdo isso gerar o select vou ter alguns problemas, pois o sistema é utilizado mais por pessoas com internet discada, entao, por uma questao de performance, eu preciso usar os IDs.
como eu faria dessa forma, passando os IDs?
por enqto é so
abs
T+