JSF SELECTONEMENU Validation Error: Value is not valid

12 respostas
F

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

P

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 !

F

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

P

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?

J

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?

J

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

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