JSF SELECTONEMENU Validation Error: Value is not valid

12 respostas
Filipeus

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>

12 Respostas

Polverini

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 !

Filipeus

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

Polverini

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

C

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?

jeffev

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?

R

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?

Implementa equals e hashcode.

C

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?

jeffev

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.

C

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)]
jeffev

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.

C

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?

F

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>.

Criado 19 de agosto de 2011
Ultima resposta 13 de jun. de 2013
Respostas 12
Participantes 6