SelectOneMenu - Validation Error: Value is not valid

0 respostas
Diego.G.A

Galera to com o seguinte problema.
Eu Tenho dois selectonemenu
um com lista de estados
e outro com a lista de cidades do estado selecionado o problema ocorre da seguinte maneira.
eu seleciono o estado ele popula as cidades, mas quando eu submeto o formulario, o jsf carrega a minha lista de cidades novamente,
sendo que ao carrgar a lista de cidades, o bean que é responsavel por isso perde o estado, como se um novo objeto estivesse sendo criado.
o código abaixo.

estadoBean
package br.com.compracoletiva.beans;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;

import br.com.compracoletiva.dao.EstadoDao;
import br.com.compracoletiva.entity.Estado;
import br.com.compracoletiva.util.GenericBean;

@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class EstadoBean extends GenericBean {

	@Autowired
	private EstadoDao estadoDao;
	
	private List<Estado> estados;

	public List<Estado> getEstados() {
		if(estados == null || estados.size() == 0)
			estados = estadoDao.findAll();
		return estados;
	}

	public void setEstados(List<Estado> estados) {
		this.estados = estados;
	}
	
}
cidadeBean
package br.com.compracoletiva.beans;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;

import br.com.compracoletiva.dao.CidadeDao;
import br.com.compracoletiva.entity.Cidade;
import br.com.compracoletiva.entity.Estado;
import br.com.compracoletiva.util.GenericBean;

@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class CidadeBean extends GenericBean {

	@Autowired
	private CidadeDao cidadeDao;

	private List<Cidade> cidades = new ArrayList<Cidade>();

	private long estado;

	public List<Cidade> getCidades() {
		return cidades;
	}

	public void loadCidadesByEstado() {
		if (estado != 0L) {
			cidades = cidadeDao.findAllByEstado(new Estado(estado));
		} else
			cidades = new ArrayList<Cidade>();
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public long getEstado() {
		return estado;
	}

	public void setEstado(long estado) {
		this.estado = estado;
	}

}
administradorBean
package br.com.compracoletiva.beans;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;

import br.com.compracoletiva.business.AdministradorService;
import br.com.compracoletiva.entity.Administrador;
import br.com.compracoletiva.entity.Login;
import br.com.compracoletiva.util.GenericBean;

@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class AdministradorBean extends GenericBean {

	@Autowired
	private AdministradorService administradorService;

	private Administrador administrador = new Administrador();

	private Login login = new Login();

	public void salvar() {
		administrador.setLogin(login);
		if (administradorService.save(administrador)) {
			addInfoMessage("administrador.action.save");
		} else {
			addErrorMessage("administrador.action.save.error");
		}
		novo();
	}

	public void novo() {
		administrador = new Administrador();
		login = new Login();
	}

	public void excluir() {
		if (administradorService.delete(administrador)) {
			addInfoMessage("administrador.action.delete");
		} else {
			addErrorMessage("administrador.action.delete.error");
		}
	}

	public List<Administrador> getAdministradores() {
		return administradorService.getAdministradores();
	}

	public Administrador getAdministrador() {
		return administrador;
	}

	public void setAdministrador(Administrador administrador) {
		this.administrador = administrador;
	}

	public Login getLogin() {
		return login;
	}

	public void setLogin(Login login) {
		this.login = login;
	}

}
administradores.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui"
	template="/template/layoutManager.xhtml">

	<ui:define name="title">
		<h:outputText value="#{messages['administrador.title.label']}" />
	</ui:define>

	<ui:define name="body">
		<p:messages id="messages" showDetail="true" />
		<h:form id="formManagerAdministrador">
			<h:inputHidden
				value="#{administradorBean.administrador.idAdministrador}" />
			<p:panel header="#{messages['administrador.panelManter.label']}">
				<h:panelGrid columns="4">
					<h:outputLabel value="#{messages['administrador.nome.label']}" />
					<p:inputText id="nome" size="40"
						value="#{administradorBean.administrador.nome}"
						label="#{messages['administrador.nome.label']}" required="true" />

					<h:outputLabel for="email"
						value="#{messages['administrador.email.label']}" />
					<p:inputText id="email" size="40"
						value="#{administradorBean.administrador.email}"
						label="#{messages['administrador.email.label']}" required="true" />

					<h:outputLabel for="login" value="#{messages['login.login.label']}" />
					<p:inputText id="login" value="#{administradorBean.login.login}"
						label="#{messages['login.login.label']}" required="true" />

					<h:outputLabel for="senha" value="#{messages['login.senha.label']}" />
					<p:password id="senha" value="#{administradorBean.login.senha}"
						promptLabel="#{messages['org.primefaces.password.feedback.promptLabel']}"
						weakLabel="#{messages['org.primefaces.password.feedback.weak']}"
						goodLabel="#{messages['org.primefaces.password.feedback.good']}"
						strongLabel="#{messages['org.primefaces.password.feedback.strong']}"
						label="#{messages['login.senha.label']}" />

					<h:outputLabel value="#{messages['estado.descricao.label']}" />
					<h:selectOneMenu id="estado" required="true"
						value="#{cidadeBean.estado}"
						label="#{messages['estado.descricao.label']}">
						<f:selectItem itemValue="0"
							itemLabel="#{messages['estado.noneSelected.label']}" />
						<f:selectItems value="#{estadoBean.estados}" var="estado"
							itemLabel="#{estado.descricao}"
							itemValue="#{estado.idEstado}" />
						<p:ajax update="cidade, messages"
							listener="#{cidadeBean.loadCidadesByEstado}" />
					</h:selectOneMenu>

					<h:outputLabel value="#{messages['cidade.descricao.label']}" />
					<h:selectOneMenu id="cidade" required="false"
						value="#{administradorBean.administrador.cidade}"
						label="#{messages['cidade.descricao.label']}">
						<f:selectItem itemValue="0"
							itemLabel="#{messages['cidade.noneSelected.label']}" />
						<f:selectItems value="#{cidadeBean.cidades}" var="cidade"
							itemLabel="#{cidade.descricao}"
							itemValue="#{cidade.idCidade}" />
						<f:validator validatorId="cidadeValidator"/>
						<f:converter converterId="cidadeConverter"/>
					</h:selectOneMenu>
					
					<p:commandButton value="#{messages['button.salvar']}"
						actionListener="#{administradorBean.salvar}"
						update="formManagerAdministrador, messages" />
					<p:commandButton value="#{messages['button.cancelar']}"
						actionListener="#{administradorBean.novo}"
						immediate="true"
						update="formManagerAdministrador, messages"
						type="reset" />
				</h:panelGrid>
			</p:panel>
		</h:form>
	</ui:define>

</ui:composition>

alguém sabe porque isso acontece.

Criado 25 de março de 2011
Respostas 0
Participantes 1