JSF SELECTONEMENU Validation Error: Value is not valid

Boa tarde,

Estou com problema tenho select onemenu que chama outro select. Ate ai tudo bem, mas qdo mando salvar ele da erro Validation Error: Value is not valid.

Segue o bean e a tela abaixo:

public List getSelectSistema() {
selectSistema.clear();
LinkedHashSet hash = new LinkedHashSet();
nomeSistema = “”;
try {
if (sistema != null) {
nomeSistema = sistema.getNomeSistema();
}
List dados = new SistemaDao().listarSistema();

		for (Sistema sis : dados) {
			String sistema = sis.getNomeSistema();
			hash.add(sistema);
		}

		for (String sis : hash) {
			SelectItem s = new SelectItem();
			s.setValue(sis);
			s.setLabel(sis);

			this.selectSistema.add(s);

		}

		//popularResponsavel();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return selectSistema;
}

public void popularResponsavel() {
	selectSistemaResponsavel.clear();
	try {
		if (nomeSistema != "" && nomeSistema != null) {
			List<Sistema> dados = new SistemaDao()
					.listarResponsavelPorSistema(nomeSistema);

			for (Sistema sis : dados) {
				SelectItem s = new SelectItem();
				s.setValue(sis.getIdSistema());
				s.setLabel(sis.getResponsavel());
				selectSistemaResponsavel.add(s);
			}
		} else {
			nomeSistema = selectSistema.get(0).getLabel();
			List<Sistema> dados = new SistemaDao()
					.listarResponsavelPorSistema(nomeSistema);

			for (Sistema sis : dados) {
				SelectItem s = new SelectItem();
				s.setValue(sis.getIdSistema());
				s.setLabel(sis.getResponsavel());
				selectSistemaResponsavel.add(s);
			}
		}
		
		ordenar(selectSistemaResponsavel);
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

public List<SelectItem> getSelectSistemaResponsavel() {
	if (selectSistemaResponsavel.isEmpty()) {
		popularResponsavel();
	}
	return selectSistemaResponsavel;
}

TELA

<h:outputText value=“Nome: " style=“FONT-SIZE: small;”/>
<h:selectOneMenu id=“sistemanome”
value=”#{controller.nomeSistema}"
style=“FONT-SIZE: xx-small;” >
<f:selectItems value="#{controller.selectSistema}" />
<a4j:support event=“onchange” ajaxSingle=“true”
action="#{controller.popularResponsavel}"
reRender=“sistemagestor” />
</h:selectOneMenu>


<h:outputText value=“Responsável: " style=“FONT-SIZE: small;”/>
<h:selectOneMenu id=“sistemagestor”
value=”#{controller.sistema.idSistema}">
<f:selectItems
value="#{controller.selectSistemaResponsavel}" />
</h:selectOneMenu>

vc vai precisar criar um converter para a classe que está usando o selectonemenu!

dica: Use a tag code para incluir seus codigo assim fica mais legivel !

Boa tarde amigo!!! poderia me dar um exemplo por favor?

da uma olhada aqui http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/

Fiz o converter, ele está funcionando e achando o objeto conforme o esperado, só que após isso dá o seguinte erro:

sourceId=prestadorForm:j_id111:j_id343:cidade[severity=(ERROR 2), summary=(valor não é válido), detail=(valor não é válido)]

Alguém saberia dizer o que pode estar gerando esse erro?

Aparentemente o valor passado para o converter não é válido, talvez esteja esperando um numero e vem uma string.

Já debugou para verificar qual o valor que esta passando no converter?

[quote=cmbergamo]Fiz o converter, ele está funcionando e achando o objeto conforme o esperado, só que após isso dá o seguinte erro:

sourceId=prestadorForm:j_id111:j_id343:cidade[severity=(ERROR 2), summary=(valor não é válido), detail=(valor não é válido)]

Alguém saberia dizer o que pode estar gerando esse erro?[/quote]

Implementa equals e hashcode.

Gerei o equals e o hashCode e continua o mesmo erro.

No debug conferi que o converter consegue recuperar o objeto corretamente.

O erro ainda persiste e não há outras informações, só a linha citada anteriormente.

Alguma outra idéia?

Bom, eu não uso desta forma (converter), itero minha lista e transformo em uma lista de selecteditens, essa lista que mando pra view, e a view manda somente o id.

Talvez tente dessa forma, se tiver dúvidas avisa.

Fiz o que foi falado.

Segue trecho dos códigos.

— JSF —

&lt;s:decorate template="/layout/edit.xhtml"&gt;
			&lt;ui:define name="label"&gt;
				&lt;h:outputLabel for="cidade" value="#{messages['prestadores.endereco_cidade']}"/&gt;
			&lt;/ui:define&gt;
			&lt;h:selectOneMenu id="cidade" styleClass="radioSelect inline" required="true" value="#{prestadoresIdentificacaoPrincipalManager.endereco.cidade}"&gt;
				&lt;s:selectItems value="#{enderecosHelper.listaCidadeItens(ufHolder.sigla)}" var="_opcoes" label="#{_opcoes.label}" itemValue="#{_opcoes.value.id}" noSelectionLabel="--- Selecione a Cidade ---"/&gt;
			&lt;/h:selectOneMenu&gt;

&lt;/s:decorate&gt;

— Método chamado —

public List&lt;SelectItem&gt; listaCidadeItens(String uf) {
    	List&lt;SelectItem&gt; itens = new ArrayList&lt;SelectItem&gt;();

        if (uf != null) {
        	UfsDAO ufDao = new UfsDAO(cidadesDAO.getEntityManager());
        	
        	for (Cidade cid : cidadesDAO.findByUF(ufDao.findBySigla(uf)))
        		itens.add(new SelectItem(cid, cid.getDescricao())); 
        	
        	ufDao = null;
        	
        }
        return itens;
    }

— Console do JBoss —

21:35:39,658 ERROR [STDERR] Nov 15, 2012 9:35:39 PM com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=prestadorForm:j_id111:j_id343:cidade[severity=(ERROR 2), summary=(valor não é válido), detail=(valor não é válido)]

Está um pouco diferente de como eu faço. talvez seja isso.

Aqui eu passo o id dessa forma.

for (Cidade cid : cidadesDAO.findByUF(ufDao.findBySigla(uf))) itens.add(new SelectItem(cid.getId(), cid.getDescricao()));

Aqui eu pego somente o valor do id

<h:selectOneMenu id="cidade" styleClass="radioSelect inline" required="true" value="#{prestadoresIdentificacaoPrincipalManager.endereco.cidade.id}">  

OBS: só debuga para ber com quais valores está indo a lista. Pode só olhar o html gerado pela página.

Fiz confome você mostrou e não funcionou.

O que descobri foi que se eu deixar o selectOneMenu fixo a estrutura funciona corretamente, se o selectOneMenu fica dependendo do estado, ele gera o erro.

Alguém sabe o motivo?

Verifique se seu entity manager está com nome de entityManager, e não outro… pelo que vi aqui se tiver outro nome, você tem que especificar no components.xml. (foi oque entendi).

Mudei o meu de “em” pra “entityManager” e deu certo aqui… =D
(tem que usar o <s:convertEntity/> la na view, e <s:selectItems>, não <f:selectItems>.