JSF - Erro de "Expected a child component type of UISelectItem/UISelectItems" estranho

ola pessoal
eu tenho o seguinte metodo na classe Pessoa

public Map getSexoLista() { Map<String,Sexo> est = new HashMap<String,Sexo>(); //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()); est.put(type.getDescr(),type); } return est; }
e tenho o seguinte metodo no Enum sexo

public Map getSexoLista2() { Map<String,Sexo> est = new HashMap<String,Sexo>(); //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()); est.put(type.getDescr(),type); } return est; }

bem, como voces podem ver, eles sao identicos a nao ser pelo nome

porem, se eu uso no meu form da seguinte forma funciona

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

mas se eu uso da seguinte forma

<f:selectItems value="#{pessoaFisicaMB.pessoaFisica.sexo.sexoLista2}"/>

ele me gera o seguinte erro

javax.servlet.ServletException: "Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(sexoID). javax.faces.webapp.FacesServlet.service(FacesServlet.java:256) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:147) org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:256) org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:362) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488)
agora, nao entendo por que, ja que os metodos sao iguais, apenas o mudar de lugar faz gerar o erro.
e pelo retorno do erro, me parece que ele esta encontrando o metodo

o que estou fazendo de errado?

abs
T+

Krusst, você conseguiu resolver este problema?

Eu passei pela mesma situação e consegui solucionar fazendo um carregamento forçado do atributo no construtor do ManagerBean, por exemplo:

	public RegiaoControl(){
		rdao 	 = new RegiaoDAO();
		listPais = rdao.getAllPais();

		dropDownPais(null); // load forçado (tosco)
		dropDownEstado(null);
	}

Não sei se é a melhor solução, porém, funcionou.

	/* DropDowns */
	public void dropDownPais(ValueChangeEvent vce){
		Collection coll = rdao.getAllPais();
		if( coll == null || coll.size() == 0 ){
						
		}else{

			int counter 	 = 0; // contador
			itemDropDownPais = new SelectItem[coll.size()];
			Iterator it 	 = coll.iterator();
			while( it.hasNext() ){
				Pais p = (Pais) it.next();
				itemDropDownPais[counter] = new SelectItem(p.getId_pais(), p.getNome()); 

				counter++;
			}// while end
		}
	}// 

Espero que tenha ajudado.

abraço.

resolvi, meio que sem querer…rs

tinha que mudar pra static, ai funciona

public static Map<String,String> getLista() { 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(Integer.toString(type.getId()),type.getDescr().toString()); } return est; }

nao sei por, mais era por isso

obrigado

falow