[Resolvido] Erro de conversao

3 respostas
D

Bom dia Pessoal, novamente estou aqui para pedir ajuda de voces.
Tenho o html abaixo

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<h:body>
	
	<div class="separador"> </div>

	<p:outputPanel styleClass="boxW300" id="boxFisicoNome">						
		<h:outputLabel value="Nome" for="fisicoNome" title="Nome" styleClass="obrigatorio w300 lblDescCampo campoTipoClienteFisico" />
		<p:inputText id="fisicoNome" label="Nome" value="#{ClienteCadastroBean.cliente.nome}" maxlength="100" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" styleClass="w300" />
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW200" id="boxFisicoCPF">	
		<h:outputLabel value="CPF" for="fisicoCPF" title="CPF" styleClass="obrigatorio w200 lblDescCampo" />
		<p:inputMask id="fisicoCPF" label="CPF" mask="[CPF removido]" value="#{ClienteCadastroBean.cliente.cnpf}" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" styleClass="w200">
			<p:ajax event="blur" listener="#{ClienteCadastroBean.ValidaCPF}" update="boxMensagemValidacao"/>
		</p:inputMask>
	</p:outputPanel>
	
	<div class="separador"> </div>

	<p:outputPanel styleClass="boxW200" id="boxFisicoRG">	
		<h:outputLabel value="RG" for="fisicoRG" title="RG" styleClass="w200 lblDescCampo" />
		<p:inputText id="fisicoRG" label="RG" value="#{ClienteCadastroBean.cliente.rgInscEstadual}" maxlength="10" styleClass="w200"/>
	</p:outputPanel>
	
	<p:outputPanel styleClass="boxW300" id="boxFisicoEndereco">
		<h:outputLabel value="Endereço" for="fisicoEndereco" title="Endereço" styleClass="obrigatorio w300 lblDescCampo" />
		<p:inputText id="fisicoEndereco" label="Endereco" value="#{ClienteCadastroBean.endereco.rua}" styleClass="w300" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" maxlength="100"/>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW150" id="boxFisicoNumero">
		<h:outputLabel value="Número" for="fisicoNumero" title="Número" styleClass="obrigatorio w150 lblDescCampo" />
		<p:inputText id="fisicoNumero" label="Numero" value="#{ClienteCadastroBean.endereco.numero}" styleClass="w150 numeric" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}"/>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW150" id="boxFisicoBairro">
		<h:outputLabel value="Bairro" for="fisicoBairro" title="Bairro" styleClass="obrigatorio w150 lblDescCampo" />
		<p:inputText id="fisicoBairro" label="Bairro" value="#{ClienteCadastroBean.endereco.bairro}" styleClass="w150" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" />
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW300" id="boxFisicoComplemento">
		<h:outputLabel value="Complemento" for="fisicoComplemento" title="Complemento"  styleClass="w300 lblDescCampo" />
		<p:inputText id="fisicoComplemento" label="Complemento" value="#{ClienteCadastroBean.endereco.complemento}" styleClass="w300" maxlength="100"/>
	</p:outputPanel>
	
	<p:outputPanel styleClass="boxW75" id="boxFisicoCep">
		<h:outputLabel value="Cep" for="fisicoCep" title="Cep" styleClass="obrigatorio w75 lblDescCampo" />
		<p:inputMask id="fisicoCep" label="Cep" value="#{ClienteCadastroBean.endereco.cep}" styleClass="w75" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" mask="99999-999"/>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW200" id="boxFisicoEstado">
		<h:outputLabel value="Estado" for="fisicoEstado" title="Estado" styleClass="obrigatorio w175 lblDescCampo" />
		<h:selectOneMenu id="fisicoEstado" value="#{ClienteCadastroBean.estadoID}" styleClass="w175" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}">
			<f:selectItem itemLabel="#{MensagemBean.textoSelecione}" itemValue="" noSelectionOption="true"/>
			<f:selectItems value="#{EstadoListagemBean.listaEstado}" var="estado" itemLabel="#{estado.nome}" itemValue="#{estado.estadoID}"/>
			<p:ajax update="fisicoCidade" listener="#{ClienteCadastroBean.ListaCidadaPorEstado}"/>
		</h:selectOneMenu>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW250" id="boxFisicoCidade">
		<h:outputLabel value="Cidade" for="fisicoCidade" title="Cidade" styleClass="obrigatorio w250 lblDescCampo" />
		<h:selectOneMenu id="fisicoCidade" value="#{ClienteCadastroBean.endereco.cidade}" converter="CidadeConverter" styleClass="w250" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}">
			<f:selectItem  itemLabel="#{MensagemBean.textoSelecione}" itemValue="" noSelectionOption="true"/>
			<f:selectItems value="#{ClienteCadastroBean.listaCidades}" var="cidade" itemLabel="#{cidade.nome}" itemValue="#{cidade}" /> 
		</h:selectOneMenu>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW200" id="boxFisicoTelefone">
		<h:outputLabel value="Telefone" for="fisicoTelefone" title="Telefone" styleClass="w200 lblDescCampo" />
		<p:inputMask id="fisicoTelefone" label="Telefone" value="#{ClienteCadastroBean.contato.telefone}" styleClass="w200"  mask="([telefone removido]" />
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW150" id="boxFisicoCelular">
		<h:outputLabel value="Celular" for="fisicoCelular" title="Celular" styleClass="w150 lblDescCampo" />
		<p:inputMask id="fisicoCelular" label="Celular" value="#{ClienteCadastroBean.contato.celular}" styleClass="w150"  mask="([telefone removido]" />
	</p:outputPanel>
	
	
	<p:outputPanel styleClass="boxW300" id="boxFisicoEmail">
		<h:outputLabel value="Email" for="fisicoEmail" title="Email" styleClass="w300 lblDescCampo" />
		<p:inputText id="fisicoEmail" label="Email" value="#{ClienteCadastroBean.contato.email}" styleClass="w300" maxlength="100">
			<p:ajax event="blur" listener="#{ClienteCadastroBean.ValidaEmail}" update="boxMensagemValidacao"/>
		</p:inputText>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW300" id="boxFisicoVoip">
		<h:outputLabel value="Voip" for="fisicoVoip" title="Voip" styleClass="w300 lblDescCampo" />
		<p:inputText id="fisicoVoip" label="Voip" value="#{ClienteCadastroBean.contato.voip}" styleClass="w300" maxlength="100"/>
	</p:outputPanel>
	
	<div class="separador"> </div>
	
	<p:outputPanel styleClass="boxW200" id="boxFisicoStatus">
		<h:outputLabel value="Status" for="fisicoStatus" title="Status" styleClass="obrigatorio w200 lblDescCampo" />
		<h:selectOneMenu id="fisicoStatus" value="#{ClienteCadastroBean.cliente.status}" title="Status" styleClass="w200" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}">
			<f:selectItem itemLabel="#{MensagemBean.textoSelecione}" itemValue="" />
			<f:selectItems value="#{ProjetoBean.status}"/> 
		</h:selectOneMenu>
	</p:outputPanel>

</h:body>

</html>

ao fazer submit do formulario está sendo gerado o seguinte erro
Cadastro:fisicoCidade: Erro de validação: o valor não é válido.
Para tentar resolver o problema já sobreescrevi os hashCode e equals da classe Endereco e Cidade, mas não funcionou.

Abaixo segue a minha classe converter

public class CidadeConverter implements Converter {
	
	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		
		if ( (value != null) && (value.trim().length() > 0) && (!value.equals(GlossarioTexto.getInstance().getSelecione())) && (!value.equals(GlossarioMensagens.getInstance().getMSG12())) ) {
			
			Integer cidadeID = Integer.valueOf(value);
			
			try {
				
				CidadeRN cidadeRN	= 	new CidadeRN();
				Cidade	 cidade		=	new Cidade();
				cidade.setCidadeID(cidadeID);
				cidade				=	cidadeRN.Obter(cidade);
				return cidade;
				
			} catch (Exception e) {
				throw new ConverterException("Erro ao efetuar a conversão da classe cidade" + value + "." + e.getMessage());
			}
		}
		
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		
		if( (value != null) && (!value.equals("")) ){
			if (value instanceof Cidade) {
				Cidade cidade = (Cidade) value;
				return cidade.getCidadeID().toString();
			}else{ 
	        	CidadeRN cidadeRN	=	new CidadeRN();
	        	Cidade cidade		=	new Cidade();
	        	cidade.setCidadeID(Integer.parseInt(value.toString()));
	            cidade 				= 	cidadeRN.Obter(cidade);
	            return cidade.getCidadeID().toString();
			}
		}
		
		return null;
	}
}

Alguem tem mais alguma ideia ?

Att

3 Respostas

fbahia32

Envia a sua classe Endereco e Cidade para que possamos ver.

D

Segue

Endereco

@Entity
@Table(name = "endereco")
public class Endereco implements Serializable {

	private static final long serialVersionUID = -6543126367934527420L;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer enderecoID;
	
	@ManyToOne
	@JoinColumn(name="cidadeID",nullable = false)
	private Cidade cidade;
	
	@ManyToOne
	@JoinColumn(name="clienteID")
	private Cliente cliente;
	
	@Column(nullable = false, length = 100)
	private String rua;
	
	@Column(nullable = false)
	private String numero;
	
	@Column(length = 100)
	private String complemento;
	
	@Column(nullable = false, length = 100)
	private String bairro;
	
	@Column(nullable = false)
	private String cep;

	public Integer getEnderecoID() {
		return enderecoID;
	}

	public void setEnderecoID(Integer enderecoID) {
		this.enderecoID = enderecoID;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public String getRua() {
		return rua;
	}

	public void setRua(String rua) {
		this.rua = rua;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((bairro == null) ? 0 : bairro.hashCode());
		result = prime * result + ((cep == null) ? 0 : cep.hashCode());
		result = prime * result + ((cidade == null) ? 0 : cidade.hashCode());
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result
				+ ((complemento == null) ? 0 : complemento.hashCode());
		result = prime * result
				+ ((enderecoID == null) ? 0 : enderecoID.hashCode());
		result = prime * result + ((numero == null) ? 0 : numero.hashCode());
		result = prime * result + ((rua == null) ? 0 : rua.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Endereco))
			return false;
		Endereco other = (Endereco) obj;
		if (bairro == null) {
			if (other.bairro != null)
				return false;
		} else if (!bairro.equals(other.bairro))
			return false;
		if (cep == null) {
			if (other.cep != null)
				return false;
		} else if (!cep.equals(other.cep))
			return false;
		if (cidade == null) {
			if (other.cidade != null)
				return false;
		} else if (!cidade.equals(other.cidade))
			return false;
		if (cliente == null) {
			if (other.cliente != null)
				return false;
		} else if (!cliente.equals(other.cliente))
			return false;
		if (complemento == null) {
			if (other.complemento != null)
				return false;
		} else if (!complemento.equals(other.complemento))
			return false;
		if (enderecoID == null) {
			if (other.enderecoID != null)
				return false;
		} else if (!enderecoID.equals(other.enderecoID))
			return false;
		if (numero == null) {
			if (other.numero != null)
				return false;
		} else if (!numero.equals(other.numero))
			return false;
		if (rua == null) {
			if (other.rua != null)
				return false;
		} else if (!rua.equals(other.rua))
			return false;
		return true;
	}
	
}

Cidade

@Entity
@Table(name = "cidade")
public class Cidade implements Serializable {
	
	private static final long serialVersionUID = -7266657587772333323L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer cidadeID;
	
	@ManyToOne
	@JoinColumn(name="estadoID",nullable = false)
	private Estado estado ;
	
	@Column(nullable = false, length = 100)
	private String nome;

	@ProjetoAnnotarion(camposFiltro = "cidadeID" , tipoDado = "int")
	public Integer getCidadeID() {
		return cidadeID;
	}
	
	public void setCidadeID(Integer cidadeID) {
		this.cidadeID = cidadeID;
	}

	@ProjetoAnnotarion(camposFiltro = "estadoID" , tipoDado = "int", objetoRelacionado="estado", metodoRelacionado = "getEstadoID")
	public Estado getEstado() {
		return estado;
	}

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

	@ProjetoAnnotarion(camposFiltro = "nome" , tipoDado = "string")
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((cidadeID == null) ? 0 : cidadeID.hashCode());
		result = prime * result + ((estado == null) ? 0 : estado.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Cidade))
			return false;
		Cidade other = (Cidade) obj;
		if (cidadeID == null) {
			if (other.cidadeID != null)
				return false;
		} else if (!cidadeID.equals(other.cidadeID))
			return false;
		if (estado == null) {
			if (other.estado != null)
				return false;
		} else if (!estado.equals(other.estado))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		return true;
	}

}

fbahia32 uma coisa que reparei, é que mudei o scoped do meu bean de REQUEST para VIEW e funcionou.
Ai tive outro problema, como tenho o mesmo formulário para cadastro e edicao, as informacoes do cliente não foram carregadas no formulario quando alterei o scoped para VIEW.

D

fbahia32 Obrigado pela ajuda, e consegui resolver, mudando os atributos que controlavam o ajax que populava o combo de cidades para static.

Criado 23 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 3
Participantes 2