JSF - Enum+selectOneMenu, erro ao converter '0' to enum

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+

Vc fez assim:

<h:selectOneMenu id="pessoaSexoID" value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo}"> <f:selectItems value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexo.sexoLista}"/> </h:selectOneMenu>

Porém o seu método sexoLista está dentro de pessoaFisica e não de sexo.

<f:selectItems value="#{pessoa.pessoaFisicaDB.pessoaFisica.sexoLista}"/>