SelectOneMenu - Validation Error: Value is not valid

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

[code]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;
}

}
[/code]

cidadeBean

[code]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;
}

}
[/code]

administradorBean

[code]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;
}

}
[/code]

administradores.xhtml

[code]
<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>[/code]

alguém sabe porque isso acontece.