Olá, estou aprendendo a usar o eclipse EE com primefaces e TomCat, mas não consigo de jeito nenhum carregar para o select one menu o estado e em consequência do estado, a cidade de um endereço de um atleta(pessoa). É um sistema um pouco complexo que tentei fazer mesmo estando começando, e acho que por isso estou tendo dificuldades, já tentei usar converter, mas não carrega de jeito nenhum, vi algumas soluções usando o HibernateUtil, mas não aprendi a mexer com isso. Vou deixar os codigos, e o SQL do banco, se alguém tiver pelo menos um caminho pra resolver essa questão, já vai ajudar muitooo.
Obs: Todas as classes tem um DAO com inserir/Alterar/Excluir/listartodos/BuscarPorID e outros adicionais, se for necessário eu posto. Tiver que cortar algumas declarações e gets e sets, mas acho que dá pra entender rs qualquer coisa é só falar que eu posto.
Atleta:
public class Atleta {
private int id;
private String nomecompleto;
private int cpf;
private Date dtnascimento;
private Endereco endereco;
}
Endereco:
public class Endereco {
private int id;
private String descricao;
private String rua;
private int numero;
private String complemento;
private Estado estado;
private Cidade cidade;
private int cep;
}
Estado:
public class Estado {
private int id;
private String uf;
private List cidades;
}
Cidade:
public class Cidade {
private int id;
private String nome;
private Estado estado;
}
FabricaConexao:
package dao;
import java.sql.Connection; import java.sql.DriverManager;
public class FabricaConexao { private Connection conexao;
private String url = “jdbc:postgresql://localhost:5432/CBJ”;
private String user = “postgres”;
private String pass = “postgres”;
public Connection fazerConexao() {
try {
Class.forName("org.postgresql.Driver");
this.conexao = DriverManager.getConnection(url, user, pass);
} catch (Exception e) {
e.printStackTrace();
}
return this.conexao;
}
public void fecharConexao() {
try {
this.conexao.close();
} catch (Exception e) {
e.printStackTrace();
}
}
AtletaBean:
@ ManagedBean @ ViewScoped public class AtletaBean {
@ PostConstruct
public void init() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
AtletaDao dao = new AtletaDao(conexao);
EnderecoDao daoEnd = new EnderecoDao(conexao);
this.listaAtletas = dao.listartodos();
this.listaEnderecos = daoEnd.listartodos();
this.atletas = new ListDataModel<Atleta>(this.listaAtletas);
this.enderecos = new ListDataModel <Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararNovo() {
try {
this.atleta = new Atleta();
this.endereco = new Endereco();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void CadastrarAtleta() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
AtletaDao dao = new AtletaDao(conexao);
EnderecoDao daoEnd = new EnderecoDao(conexao);
daoEnd.inserir(this.atleta.getEndereco());
dao.inserir(this.atleta);
this.listaAtletas = dao.listartodos();
this.listaEnderecos = daoEnd.listartodos();
this.atletas = new ListDataModel<Atleta>(this.listaAtletas);
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void PrepararExcluir() {
try {
this.atleta = atletas.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void ExcluirAtleta() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
AtletaDao dao = new AtletaDao(conexao);
EnderecoDao daoEnd = new EnderecoDao(conexao);
Endereco EndAqui = this.atleta.getEndereco();
daoEnd.deletar(EndAqui.getId());
dao.deletar(this.atleta.getId());
this.listaAtletas = dao.listartodos();
this.listaEnderecos = daoEnd.listartodos();
this.atletas = new ListDataModel<Atleta>(this.listaAtletas);
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararEditar() {
try {
this.atleta = atletas.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void EditarAtleta() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
AtletaDao dao = new AtletaDao(conexao);
EnderecoDao daoEnd = new EnderecoDao(conexao);
dao.alterar(this.atleta);
daoEnd.alterar(this.atleta.getEndereco());
this.listaAtletas = dao.listartodos();
this.listaEnderecos = daoEnd.listartodos();
this.atletas = new ListDataModel<Atleta>(this.listaAtletas);
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
EnderecoBean:
@ ManagedBean @ ViewScoped public class EnderecoBean {
@ PostConstruct
public void init() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EnderecoDao dao = new EnderecoDao(conexao);
EstadoDao daoEst = new EstadoDao(conexao);
CidadeDao daoCid = new CidadeDao(conexao);
this.listaEnderecos = dao.listartodos();
this.listaEstados = daoEst.listartodos();
this.listaCidades = daoCid.listartodos();
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
this.estados = new ListDataModel<Estado>(this.listaEstados);
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararNovo() {
try {
this.endereco = new Endereco();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void CadastrarEndereco() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EnderecoDao dao = new EnderecoDao(conexao);
dao.inserir(this.endereco);
this.listaEnderecos = dao.listartodos();
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void PrepararExcluir() {
try {
this.endereco = enderecos.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void ExcluirEndereco() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EnderecoDao dao = new EnderecoDao(conexao);
dao.deletar(this.endereco.getId());
this.listaEnderecos = dao.listartodos();
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararEditar() {
try {
this.endereco = enderecos.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void EditarEndereco() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EnderecoDao dao = new EnderecoDao(conexao);
dao.alterar(this.endereco);
this.listaEnderecos = dao.listartodos();
this.enderecos = new ListDataModel<Endereco>(this.listaEnderecos);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
EstadoBean:
@ PostConstruct
public void init() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EstadoDao dao = new EstadoDao(conexao);
CidadeDao daoCid = new CidadeDao(conexao);
this.listaEstados = dao.listartodos();
this.listaCidades = daoCid.listartodos();
this.estados = new ListDataModel<Estado>(this.listaEstados);
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararNovo() {
try {
this.estado = new Estado();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void CadastrarEstado() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EstadoDao dao = new EstadoDao(conexao);
dao.inserir(this.estado);
this.listaEstados = dao.listartodos();
this.estados = new ListDataModel<Estado>(this.listaEstados);
fc.fecharConexao();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void PrepararExcluir() {
try {
this.estado = estados.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void ExcluirEstado() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EstadoDao dao = new EstadoDao(conexao);
dao.deletar(this.estado.getId());
this.listaEstados = dao.listartodos();
this.estados = new ListDataModel<Estado>(this.listaEstados);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararEditar() {
try {
this.estado = estados.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void EditarEstado() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
EstadoDao dao = new EstadoDao(conexao);
dao.alterar(this.estado);
this.listaEstados = dao.listartodos();
this.estados = new ListDataModel<Estado>(this.listaEstados);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void CidadeDoEstado() { try {
this.estado = estados.getRowData();
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
CidadeDao daoCid = new CidadeDao(conexao);
this.listaCidades = daoCid.cidadesDoEstado(this.estado.getId());
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
CidadeBean:
public class CidadeBean {
@ PostConstruct
public void init() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
CidadeDao dao = new CidadeDao(conexao);
EstadoDao daoEst = new EstadoDao(conexao);
this.listaCidades = dao.listartodos();
this.listaEstados = daoEst.listartodos();
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
this.estados = new ListDataModel<Estado>(this.listaEstados);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararNovo() {
try {
this.cidade = new Cidade();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void CadastrarCidade() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
CidadeDao dao = new CidadeDao(conexao);
dao.inserir(this.cidade);
this.listaCidades = dao.listartodos();
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void PrepararExcluir() {
try {
this.cidade = cidades.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void ExcluirCidade() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
CidadeDao dao = new CidadeDao(conexao);
dao.deletar(this.cidade.getId());
this.listaCidades = dao.listartodos();
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
public void PrepararEditar() {
try {
this.cidade = cidades.getRowData();
} catch (Exception e) {
e.printStackTrace();
}
}
public void EditarCidade() {
try {
FabricaConexao fc = new FabricaConexao();
Connection conexao = fc.fazerConexao();
CidadeDao dao = new CidadeDao(conexao);
dao.alterar(this.cidade);
this.listaCidades = dao.listartodos();
this.cidades = new ListDataModel<Cidade>(this.listaCidades);
fc.fecharConexao();
} catch (Exception e) {
e.printStackTrace();
}
}
EstadoConverter:
@ FacesConverter(value = “converteEstado”, forClass = Estado.class )
public class ConverteEstado implements Converter, Serializable {
private static final long serialVersionUID = 1L;
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
if (value != null && !value.isEmpty()) {
return (Estado) uiComponent.getAttributes().get(value);
}
return null;
}
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
if (value instanceof Estado) {
Estado entity= (Estado) value;
String textoId = Integer.toString(entity.getId());
if (entity != null && entity instanceof Estado) {
uiComponent.getAttributes().put(textoId, entity);
return textoId;
}
}
return "";
}
Dialog de Novo Atleta onde quero usar o selectOneMenu pra cadastrar o Estado e a Cidade do Endereço do Atleta no cadastro_atletas.xhtml:
<p:dialog header=“Novo Atleta” widgetVar=“dlgNovoAtleta” height=“150"
modal=“true” appendTo=” @ (body)"
draggable=“false” resizable=“false” closable=“false” >
<h:form id="fCadastrar">
<h:panelGrid id="pgCadastrar" columns="8">
<p:outputLabel value="Nome Completo:"/>
<p:inputText id="nomecompleto" value="#{atletaBean.atleta.nomecompleto}"/>
<p:outputLabel value="CPF:"/>
<p:inputText id="cpf" value="#{atletaBean.atleta.cpf}"/>
<p:outputLabel value="Data de Nascimento:"/>
<p:calendar locale="pt" showButtonPanel="true" navigator="true" value="#{atletaBean.atleta.dtnascimento}"
id="dtnascimento" showOn="button"></p:calendar>
<p:outputLabel value="Endereco:"/>
<p:inputText id="atleta-rua" value="#{atletaBean.atleta.endereco.rua}"/>
<p:outputLabel value="Numero:"/>
<p:inputText id="atleta-numero" value="#{atletaBean.atleta.endereco.numero}"/>
<p:outputLabel value="Complemento:"/>
<p:inputText id="atleta-complemento" value="#{atletaBean.atleta.endereco.numero}"/>
<h:outputLabel value="Estado:"></h:outputLabel>
<p:selectOneMenu value="#{atletaBean.atleta.endereco.estado}" converter="converteEstado">
<f:selectItem itemLabel="Selecione um estado" itemValue="null"/>
<f:selectItems value="#{enderecoBean.listaEstados}" var="endereco.estado" itemLabel="#{endereco.estado.uf}" itemValue="#{endereco.estado}"/>
</p:selectOneMenu>
<h:outputLabel value="Cidade:"></h:outputLabel>
<p:selectOneMenu value="#{atletaBean.atleta.endereco.cidade}">
<f:selectItems value="#{enderecoBean.cidades}" var="cidade"
itemLabel="#{cidade.nome}" />
</p:selectOneMenu>
<p:outputLabel value="CEP:"/>
<p:inputText id="atleta-cep" value="#{atletaBean.atleta.endereco.cep}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton value="Cadastrar" oncomplete="PF('dlgNovoAtleta').hide();"
actionListener="#{AtletaBean.CadastrarAtleta}"
update=":tblAtletas" />
<p:commandButton value="Cancelar" onclick="PF('dlgNovoAtleta').hide();" />
</h:panelGrid>
</h:form>
</p:dialog>