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
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.
to aprendendo ainda
Agradeço demais a se poder ajudar mais uma vez caro colega