[JSF] java.lang.ClassCastException: java.lang.String cannot be cast to br.com [RESOLVIDO]

Boa noite Pessoal, desculpas qualquer coisa, ainda sou novo, e por ser novo é o meu primeiro post \o. ^^ enfim.

O que eu quero: Quero colocar os valores do banco de dados cidade em um selectOneMenu para listar as cidades do estado de Goías por exemplo

Problema: Criei a classe CidadeDAO, Cidade, ControllerCidade e ConverterCidade, mas quando executo a minha aplicação web, ele da o erro

e não lista nadaa, segue abaixo oss codigos relacionados

ControllerCidade

package br.com.estagio.controller;

import java.io.PrintWriter;
import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;

import antlr.collections.List;
import br.com.estagio.beans.Cidade;
import br.com.estagio.conversores.ConverterCidade;
import br.com.estagio.modelo.CidadeDAO;

@ManagedBean(name="controllerCidades")
@RequestScoped
public class ControllerCidades {

	private CidadeDAO dao;
	private Cidade objeto;
	private ConverterCidade converterCidade;
	
	public ControllerCidades(){
		dao = new CidadeDAO();
		converterCidade = new ConverterCidade();
		
	}

	public CidadeDAO getDao() {
		return dao;
	}

	public void setDao(CidadeDAO dao) {
		this.dao = dao;
	}

	public Cidade getObjeto() {
		return objeto;
	}

	public void setObjeto(Cidade objeto) {
		this.objeto = objeto;
	}

	public ConverterCidade getConverterCidade() {
		return converterCidade;
	}

	public void setConverterCidade(ConverterCidade converterCidade) {
		this.converterCidade = converterCidade;
	}
	
	
}

CidadeDAO

package br.com.estagio.modelo;

import java.util.List;

import javax.persistence.EntityManager;

import br.com.estagio.beans.Cidade;
import br.com.estagio.jpa.EntityManagerUtil;

public class CidadeDAO {

	private EntityManager em;
	
	public CidadeDAO(){
		em = EntityManagerUtil.getEntityManager();
	}

	//função para listar as cidades 
	@SuppressWarnings("unchecked")
	public List<Cidade> ListarCidadePorUF(){
		return em.createQuery("FROM Cidade ORDER BY nome").getResultList();
	}
	
	public EntityManager getEm() {
		return em;
	}

	public void setEm(EntityManager em) {
		this.em = em;
	}
	
}

Cidade


package br.com.estagio.beans;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name="cidade")
public class Cidade implements Serializable {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id")
	private Integer id;
	
	@NotEmpty(message="O nome da cidade não pode ser vazio")
	@Column(name="nome")
	private String nome;
	
	@NotNull(message="O estado não deve ser vazio")
	@ManyToOne
	@JoinColumn(name="estado", referencedColumnName="id", nullable=false)
	private Estado id_estado;
	
	public Cidade(){}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

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

	public Estado getIdEstado() {
		return id_estado;
	}

	public void setIdEstado(Estado id_estado) {
		this.id_estado = id_estado;
	}


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

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cidade other = (Cidade) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	public String toString(String nome) {
		return (String) nome;
	}
	
	
}

ConverterCidade


package br.com.estagio.conversores;

import java.awt.print.Printable;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.concurrent.ExecutionException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import br.com.estagio.beans.Cidade;
import br.com.estagio.beans.Unidades;
import br.com.estagio.jpa.EntityManagerUtil;


@SuppressWarnings("serial")
public class ConverterCidade implements Serializable,Converter {

	// converte da tela para o objeto 
		@Override
		public Object getAsObject(FacesContext arg0, UIComponent arg1, String string) {
			if (string == null || string.equals("Selecione uma cidade")){
				return null;
			}
			return EntityManagerUtil.getEntityManager().find(Cidade.class, 
					Integer.parseInt(string));
		}
	
		// converte do objeto para a tela
		@Override
		public String getAsString(FacesContext arg0, UIComponent arg1, Object o) {
			if (o == null){
				return null;
			}
			try {
				Cidade obj = (Cidade) o;
				return obj.getId().toString();
			} catch(Exception e){
				return "erro: "+e;
			}
			
		}
		
}

Form


<div class="form-group col-md-3" >
					<label for="cidade">Cidade </label>
					<h:selectOneMenu value="#{controllerCidades.objeto.id}" converter="#{controllerCidades.converterCidade}" class="form-control" id="cidade" name="cidade">
						<f:selectItem itemValue="0" itemLabel="Selecione uma cidade"  />  
						<f:selectItems itemValue="#{controllerCidades.dao.ListarCidadePorUF()}" />  
					</h:selectOneMenu>
					
<!-- 					<h:inputText value="#{controllerCidades.dao.ListarCidadePorUF()}" /> -->
					
				</div>

Também tenho a ligação de estado pra cidade porém eu não sei se isso tem alguma ligação com o erro :confused: mas caso tenha aqui estar a classe estado.

Estado


package br.com.estagio.beans;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name="estado")
public class Estado implements Serializable {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id")
	private Integer id;
	
	@NotEmpty(message="O nome do estado deve ser informado")
	@Column(name="nome")
	private String nome;
	
	@NotEmpty(message="A UF deve ser informada")
	@Column(name="uf")
	private String uf;
	
	@NotEmpty(message="O País deve ser informado")
	@ManyToOne
	@JoinColumn(name="pais", referencedColumnName="ID", nullable=false)
	private Pais id_pais;
	
	public Estado(){}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

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

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public Pais getId_pais() {
		return id_pais;
	}

	public void setId_pais(Pais id_pais) {
		this.id_pais = id_pais;
	}

	@Override
	public String toString() {
		return nome;
	}
	
	
	
}

Pilha do erro


java.lang.ClassCastException: java.lang.String cannot be cast to br.com.estagio.beans.Cidade
	at br.com.estagio.conversores.ConverterCidade.getAsString(ConverterCidade.java:37)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:521)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:794)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:847)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1864)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1857)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:461)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Bom realmente tentei algumas coisas ja e procurei no forum porém não encontrei nada relacionado =/

Agradeço desde ja a ajudaa galera.

O problema é esse seu primeiro selectItem de cidade:

No seu converter ele está tentando passar de “0” pra cidade. Deixe o itemValue como null ou vazio.

[quote=ErickRAR]O problema é esse seu primeiro selectItem de cidade:

No seu converter ele está tentando passar de “0” pra cidade. Deixe o itemValue como null ou vazio.[/quote]

Obrigadão irmão o primeiro erro se foi haha ^^, mas lhe perguntar agora ele me retorna uma pilha diferente se antes era a string agora é o arrayList

tenha um pouquinho de calma comigo :slight_smile: to aprendendo ainda :stuck_out_tongue: Agradeço demais a se poder ajudar mais uma vez caro colega

Form

<div class="form-group col-md-3" >
					<label for="cidade">Cidade </label>
					<h:selectOneMenu value="#{controllerCidades.objeto.id}" converter="#{controllerCidades.converterCidade}" class="form-control" id="cidade" name="cidade">
						<f:selectItem itemValue="#{null}" itemLabel="Selecione uma cidade"  />  
						<f:selectItem itemValue="#{controllerCidades.dao.ListarCidadePorUF()}" />  
					</h:selectOneMenu>
				</div>

Pilha de erro (new)

java.lang.ClassCastException: java.util.ArrayList cannot be cast to br.com.estagio.beans.Cidade
	at br.com.estagio.conversores.ConverterCidade.getAsString(ConverterCidade.java:36)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:521)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:794)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:847)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1864)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1857)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:461)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

o f:selectItem( no singular) preenche o item com um item só, nesse caso seria com uma cidade. Para preencher uma lista de cidades você precisa passar isso para um componente que receba uma lista, nesse caso o f:selectItems ( no plural). Ele irá criar um item para cada objeto da sua lista.

[code]<h:selectOneMenu value="#{controllerCidades.objeto.id}" converter="#{controllerCidades.converterCidade}" class=“form-control” id=“cidade” name=“cidade”>
<f:selectItem itemValue="#{null}" itemLabel=“Selecione uma cidade” />
<f:selectItems value="#{controllerCidades.dao.ListarCidadePorUF}" var=“cidade"
itemValue=”#{cidade}" itemLabel="#{cidade.nome}" />
</h:selectOneMenu>

[/code]

[quote=ErickRAR]o f:selectItem( no singular) preenche o item com um item só, nesse caso seria com uma cidade. Para preencher uma lista de cidades você precisa passar isso para um componente que receba uma lista, nesse caso o f:selectItems ( no plural). Ele irá criar um item para cada objeto da sua lista.

[code]<h:selectOneMenu value="#{controllerCidades.objeto.id}" converter="#{controllerCidades.converterCidade}" class=“form-control” id=“cidade” name=“cidade”>
<f:selectItem itemValue="#{null}" itemLabel=“Selecione uma cidade” />
<f:selectItems value="#{controllerCidades.dao.ListarCidadePorUF}" var=“cidade"
itemValue=”#{cidade}" itemLabel="#{cidade.nome}" />
</h:selectOneMenu>

[/code] [/quote]

Mermãoo \o. valeu demais, funcionou perfeitamente Agradeço muito a sua ajuda e também pela explicação :slight_smile: