1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Estou com dificuldade para usar selectOne e ajax do prime faces

Prezados,

Estou tentando criar dois selectOneMenu dentro de um formulário de endereço, um onde seleciona o estado e já atualiza o outro com as cidades deste estado. Tentei usar um exemplo do próprio site do Prime Faces http://www.primefaces.org/showcase/ui/pprSelect.jsf. Também estou usando Hibernate com uma infraestrutura MVC e DAO. Em uma página de testes que contem apenas a cidade salva certinho o resto dos campos de endereço. Mas quando uso estes dois selectOne juntos (um para estado e outro para cidade) não sei porque mas não salva quando tem uma cidade selecionada, e o pior é que não retorna nenhum erro. Quando o valor de cidade é null slava direito também. Eu tentei inserir uns println em locais estratégicos para tentar rastrear o problema mas parece que quando tem uma cidade selecionada o sistema não desenrola além do converter. O println do converter mostra os valores esperados para cidade e endereço mas não salva.

Segue o código da view testeend.xhtml:

Cadastro de Endereços (teste)

                <h:outputText value="Estado: " />
                <p:selectOneMenu id="drop_estado" value="#{endBean.estado}" effect="fade">  
                    <f:selectItem itemLabel="- selecione -" itemValue="" />
                       <f:selectItems value="#{endBean.estados}" var="estado" itemLabel="#{estado.sigla} - #{estado.nome}"/>  
                    <p:ajax update="drop_cidade" listener="#{endBean.handleEstadoChange}" />
                </p:selectOneMenu>

                <h:outputText value="Cidade: " />
                <p:selectOneMenu id="drop_cidade" value="#{endBean.end.idcidade}" effect="fade">  
                    <f:selectItem itemLabel="- selecione -" itemValue="" />
                       <f:selectItems value="#{endBean.cidadesPorEstado}" var="cidade" itemLabel="#{cidade.cnl} - #{cidade.nome}"/>  
                </p:selectOneMenu>

                   <h:outputLabel value="Endereço 1:"></h:outputLabel>  
                <p:inputText id="input_end1" value="#{endBean.end.endereco1}" />

                <h:outputLabel value="Endereço 2:"></h:outputLabel>  
                <p:inputText id="input_end2" value="#{endBean.end.endereco2}" />

                <h:outputLabel value="Complemento:"></h:outputLabel>  
                <p:inputText id="input_comp" value="#{endBean.end.complemento}" />

                <h:outputLabel id="input_cep" value="CEP:"></h:outputLabel>  
                <p:inputText value="#{endBean.end.cep}" />

              </p:panelGrid>
         </h:form>
         <f:facet name="footer"><p:commandButton value="Salvar" action="#{endBean.salvar}"
                         style="margin:1px 0" id="btnAdd" update="edicao,listagem"
                         icon="ui-icon-disk" />
         </f:facet>
      </p:panel>

Segue o código do Bean Cidade:


package packet.dao.cidade;

import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import packet.dao.estado.;

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

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "idcidade")
private Integer idcidade;

@ManyToOne
private Estado idestado;

@Column(name = "nomecidade")
private String nome;

@org.hibernate.annotations.NaturalId
@Column(name = "cnl")
private String cnl;


public Cidade() {
    super();
    // TODO Auto-generated constructor stub
}
public Cidade(Integer idcidade) {
    super();
    this.idcidade = idcidade;
}
public Cidade(Integer idcidade, Estado idestado, String nome, String cnl) {
    super();
    this.idcidade = idcidade;
    this.idestado = idestado;
    this.nome = nome;
    this.cnl = cnl;
}


public Integer getIdcidade() {
    return idcidade;
}
public void setIdcidade(Integer idcidade) {
    this.idcidade = idcidade;
}
public Estado getIdestado() {
    return idestado;
}
public void setIdestado(Estado idestado) {
    this.idestado = idestado;
}
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
public String getCnl() {
    return cnl;
}
public void setCnl(String cnl) {
    this.cnl = cnl;
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((cnl == null) ? 0 : cnl.hashCode());
    result = prime * result
            + ((idcidade == null) ? 0 : idcidade.hashCode());
    result = prime * result
            + ((idestado == null) ? 0 : idestado.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 (getClass() != obj.getClass())
        return false;
    Cidade other = (Cidade) obj;
    if (cnl == null) {
        if (other.cnl != null)
            return false;
    } else if (!cnl.equals(other.cnl))
        return false;
    if (idcidade == null) {
        if (other.idcidade != null)
            return false;
    } else if (!idcidade.equals(other.idcidade))
        return false;
    if (idestado == null) {
        if (other.idestado != null)
            return false;
    } else if (!idestado.equals(other.idestado))
        return false;
    if (nome == null) {
        if (other.nome != null)
            return false;
    } else if (!nome.equals(other.nome))
        return false;
    return true;
}
@Override
public String toString() {
    return "Cidade [idcidade=" + idcidade + ", idestado=" + idestado
            + ", nome=" + nome + ", cnl=" + cnl + "]";
}

}


Segue o Bean End:


package packet.dao.end;

import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import packet.dao.cidade.;

@Entity @Table(name = "end") public class End implements Serializable{

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "idend")
private Integer idend;

@ManyToOne
private Cidade idcidade;

@Column(name = "endereco1")
private String endereco1;

@Column(name = "endereco2")
private String endereco2;

@Column(name = "complemento")
private String complemento;

@Column(name = "cep")
private String cep;

public End() {
    super();
    // TODO Auto-generated constructor stub
}

public End(Integer idend) {
    super();
    this.idend = idend;
}

public End(Integer idend, Cidade idcidade, String endereco1,
        String endereco2, String complemento, String cep) {
    super();
    this.idend = idend;
    this.idcidade = idcidade;
    this.endereco1 = endereco1;
    this.endereco2 = endereco2;
    this.complemento = complemento;
    this.cep = cep;
}

public Integer getIdend() {
    return idend;
}

public void setIdend(Integer idend) {
    this.idend = idend;
}

public Cidade getIdcidade() {
    return idcidade;
}

public void setIdcidade(Cidade idcidade) {
    this.idcidade = idcidade;
}

public String getEndereco1() {
    return endereco1;
}

public void setEndereco1(String endereco1) {
    this.endereco1 = endereco1;
}

public String getEndereco2() {
    return endereco2;
}

public void setEndereco2(String endereco2) {
    this.endereco2 = endereco2;
}

public String getComplemento() {
    return complemento;
}

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

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 + ((cep == null) ? 0 : cep.hashCode());
    result = prime * result
            + ((complemento == null) ? 0 : complemento.hashCode());
    result = prime * result
            + ((endereco1 == null) ? 0 : endereco1.hashCode());
    result = prime * result
            + ((endereco2 == null) ? 0 : endereco2.hashCode());
    result = prime * result
            + ((idcidade == null) ? 0 : idcidade.hashCode());
    result = prime * result + ((idend == null) ? 0 : idend.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;
    End other = (End) obj;
    if (cep == null) {
        if (other.cep != null)
            return false;
    } else if (!cep.equals(other.cep))
        return false;
    if (complemento == null) {
        if (other.complemento != null)
            return false;
    } else if (!complemento.equals(other.complemento))
        return false;
    if (endereco1 == null) {
        if (other.endereco1 != null)
            return false;
    } else if (!endereco1.equals(other.endereco1))
        return false;
    if (endereco2 == null) {
        if (other.endereco2 != null)
            return false;
    } else if (!endereco2.equals(other.endereco2))
        return false;
    if (idcidade == null) {
        if (other.idcidade != null)
            return false;
    } else if (!idcidade.equals(other.idcidade))
        return false;
    if (idend == null) {
        if (other.idend != null)
            return false;
    } else if (!idend.equals(other.idend))
        return false;
    return true;
}

@Override
public String toString() {
    return "End [idend=" + idend + ", idcidade=" + idcidade
            + ", endereco1=" + endereco1 + ", endereco2=" + endereco2
            + ", complemento=" + complemento + ", cep=" + cep + "]";
}

}


Segue o endBean:


package packet.web;

import java.util.List; import java.util.Set; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import packet.dao.estado.; import packet.dao.cidade.; import packet.dao.end.*; import java.io.Serializable;

@ManagedBean(name = "endBean") @RequestScoped public class endBean implements Serializable{

private static final long serialVersionUID = 1L;
private End end = new End();
private String destinoSalvar;
private List<Cidade> cidades;
private List<Cidade> cidadesPorEstado;
private Cidade cidade = new Cidade();
private Estado estado = new Estado();
private List<Estado> estados;
private List<End> lista;


public List<Cidade> getCidadesPorEstado() {
    return cidadesPorEstado;
}

public void setCidadesPorEstado(List<Cidade> cidadesPorEstado) {
    this.cidadesPorEstado = cidadesPorEstado;
}

public Estado getEstado() {
    return estado;
}

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

public Cidade getCidade() {
    return cidade;
}

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

public End getEnd() {
    return this.end;
}

public void setEnd(End end) {
    this.end = end;
}

public String getDestinoSalvar() {
    return destinoSalvar;
}

public void setDestinoSalvar(String destinoSalvar) {
    this.destinoSalvar = destinoSalvar;
}

public List<Cidade> getCidades() {
    CidadeRN cidadeRN = new CidadeRN();
    this.setCidades(cidadeRN.lista());
    return this.cidades;
}

public void setCidades(List<Cidade> cidades) {
    this.cidades = cidades;
}

public List<Estado> getEstados() {
    EstadoRN estado = new EstadoRN();
    this.setEstados(estado.lista());
    return this.estados;
}

public void setEstados(List<Estado> estados) {
    this.estados = estados;
}

public List<End> getLista() {
    EndRN endRN = new EndRN();
    this.setLista(endRN.lista());
    return this.lista;
}

public void setLista(List<End> lista) {
    this.lista = lista;
}

public String novo(){
    this.setDestinoSalvar("/publico/novoend.jsf");
    this.setEnd(new End());
    return "/publico/testeend.jsf";
}

public String salvar(){
    System.out.println("salvar endBean" + this.end);
    EndRN endRN = new EndRN();
    endRN.salvar(this.end);        
    return "/publico/testeend.jsf";
}

public String salvar(End end, Cidade cidade){
    EndRN endRN = new EndRN();
    end.setIdcidade(cidade);
    this.end = end;
    endRN.salvar(this.end);        
    return "/publico/testeend.jsf";
}

public String excluir(End end){
    this.setDestinoSalvar("/publico/testeend.jsf");
    EndRN endRN = new EndRN();
    endRN.excluir(end);
    return this.destinoSalvar;
}

public List<End> buscarporcidade(Cidade c){
    EndRN end = new EndRN();
    this.setLista(end.buscarPorCidade(c.getCnl()));
    return this.getLista();
}

public void handleEstadoChange(){
    CidadeRN cidadeRN = new CidadeRN();
    if(!this.getEstado().equals(null)){  
        this.setCidadesPorEstado((List<Cidade>)cidadeRN.listaPorEstado(this.estado));  
    }else{  
        this.cidadesPorEstado = null;  
    }   
}

}

Segue o EndRN:


package packet.dao.end;

import packet.util.; import packet.dao.cidade.; import java.util.*;

public class EndRN {

private EndDAO end;
private Cidade cidade;

public EndRN(){
    this.end = DAOFactory.criarEndDAO();
}

public Cidade getCidade() {
    return cidade;
}

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

public void salvar(End end){
    Integer idend = end.getIdend();
    System.out.println("EndRN -----------" + end + "EndRN" + idend);
    if(idend == null || idend == 0){
        this.end.salvar(end);
    } else {
        this.end.atualizar(end);
    }
}

public void atualizar(End end){
    this.end.atualizar(end);
}

public void excluir(End end){
    this.end.excluir(end);
}

public End carregar(Integer idend){
    return this.end.carregar(idend);
}

public List<End> lista(){
    return this.end.listar();
}
public List<End> buscarPorCidade(String cnl){
    return this.end.buscarPorCidade(cnl);
}

public List<End> buscarPorCEP(String cep){
    return this.end.buscarPorCEP(cep);
}

public List<End> buscarPorEnd(String end){
    return this.end.buscarPorEnd(end);
}

}

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags ajax dao hibernate java-ee jpa primefaces ou faça a sua própria pergunta.