Problema para cadastrar dados - JSF + Hibernate

25/11/2010

0

Olá!
Estou com um probleminha na hora de cadastrar os dados de um form no banco

quando eu clico no botao enviar...
nao acontece nada

no log do tomcat a unica coisa q mostra é uma listagem q tem na pagina
nao mostra nada referente ao insert.

Eu tenho os combobox "bairro" e "enderecos"
o endereco depende do bairro
quando mando fazer o submit com o campo endereço em branco
o log do tomcat me mostra a mensagem de erro q o campo nao pod ser nulo
mais se passo um valor ai nao mostra nada.

no meu banco deveria apenas receber o valor de enderecos e cadastrar na tabela ocorrencia.


minha pagina xhtml esta assim
<h:form>
                    <h:panelGrid styleClass="rsPanel" width="250" columns="2"  columnClasses="scriptdemocolumn-l,scriptdemocolumn-r">                   
                        <h:outputText styleClass="rsLabel" value="Data:" />
                        <rich:calendar datePattern="dd/MM/yy" required="true"  value="#{ocorrencias.ocorrencia.data}" inputStyle="width:5em" />
                       
                        <h:outputText styleClass="rsLabel" value="Hora:" />
                        <h:inputText  styleClass="rsInput"  value="#{ocorrencias.ocorrencia.hora}" >
                        <f:convertDateTime pattern="hh:mm"/></h:inputText>
                   
                        <h:outputText styleClass="rsLabel" value="Referencia:" />
                        <h:inputText  styleClass="rsInput"  value="#{ocorrencias.ocorrencia.referenciaLocal}" />
                       
                        <h:outputText styleClass="rsLabel" value="Bairro:" />
                        <h:selectOneMenu id="status" value="#{enderecos.idBairro}">
                              <f:selectItems value="#{enderecos.comboBairros}" />
                              <a4j:support event="onchange" ajaxSingle="true" reRender="enderecos"/>
                        </h:selectOneMenu>
                       
                        <h:outputText styleClass="rsLabel" value="Logradouro:" />
                        <h:selectOneMenu id="enderecos" value="#{ocorrencias.ocorrencia.endereco.id}">
                              <f:selectItems value="#{enderecos.comboEnderecos}" />
                        </h:selectOneMenu>
                       
                        <h:outputText styleClass="rsLabel" value="Tipo de Ocorrência:" />
                        <h:selectOneMenu id="tipoDeOcorrencia" value="#{ocorrencias.ocorrencia.tipoDeOcorrencia.id}">
                              <f:selectItems value="#{tipodeocorrencia.comboTiposDeOcorrencia}" />
                        </h:selectOneMenu>
                            <rich:spacer height="5"/>
                            <a4j:commandButton value="Inserir" action="#{ocorrencias.merge}" reRender="formCadastros, listOcorrencias" status="sts" styleClass="botoes"/>
   
                        <f:facet name="footer">
                        </f:facet>
                               
                    </h:panelGrid>
                </h:form>    

e o meu Bean esta assim
public class OcorrenciaBean {

    private Ocorrencia ocorrencia = new Ocorrencia();
    private Long id;
   
    public OcorrenciaBean() {
       
        ocorrencia.setDataHoraRegistro(new Date());
        ocorrencia.setTipoDeOcorrencia(new TipoDeOcorrencia());
        ocorrencia.setEndereco(new Endereco());
       
    }

    public void setOcorrencia(Ocorrencia ocorrencia) {
        this.ocorrencia = ocorrencia;
    }

    public Ocorrencia getOcorrencia() {
        return ocorrencia;
    }

    public Long getId() {
        return id;
    }

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

    public String merge() {
       
        System.out.println(" AAAKKIIIIIIIII ---> " + this.ocorrencia.getEndereco().getEndereco());
       
        OcorrenciaFacade ocorrenciaService = new OcorrenciaFacadeImpl();
        ocorrenciaService.atualiza(this.ocorrencia);
        this.ocorrencia = new Ocorrencia();

        return "atualizaSucesso";
    }

}

Alguem sabe me dizer mais ou menos o que esta acontecendo? Oo
desde ontem quebrando a cabeça com isso e ainda nao saiu nada =Z

grato pela atenção
Erickson Sousa

Erickson Sousa

Responder

Posts

03/12/2010

Rodrigo Andrade

Boa tarde amigo, primeiro vamos lá:
Seu método merge está atualizar ao invés de salvar para um novo endereço... vc colocou persist ou merge no dao?
Segundo vc não colocou a classe endereço para agente avaliar se tem algo errado;
Terceiro vc passa quais os valores para a modificação do id do endereço no combo ( o obejto ou apenas o id)?

Responder

06/12/2010

Erickson Sousa

opa...
vamos lah

-- vc colocou persist ou merge no dao?

o .xhtml
<h:outputText styleClass="rsLabel" value="Bairro:" />
<h:selectOneMenu id="status" value="#{enderecos.idBairro}">
  <f:selectItems value="#{enderecos.comboBairros}" />
    <a4j:support event="onchange" ajaxSingle="true" reRender="enderecos"/>
</h:selectOneMenu>
                       
<h:outputText styleClass="rsLabel" value="Logradouro:" />
<h:selectOneMenu id="enderecos" value="#{ocorrencias.ocorrencia.endereco.id}">
    <f:selectItems value="#{enderecos.comboEnderecos}" />
</h:selectOneMenu>

<a4j:commandButton value="Inserir" action="#{ocorrencias.merge}" reRender="formCadastros, listOcorrencias" status="sts" styleClass="botoes"/>

o bean
private Ocorrencia ocorrencia = new Ocorrencia();
private Long id;
   
public OcorrenciaBean() {
  ocorrencia.setDataHoraRegistro(new Date());
  ocorrencia.setTipoDeOcorrencia(new TipoDeOcorrencia());
  ocorrencia.setEndereco(new Endereco());     
}

public String merge() {       
  OcorrenciaFacade ocorrenciaService = new OcorrenciaFacadeImpl();
  ocorrenciaService.atualiza(this.ocorrencia);
  this.ocorrencia = new Ocorrencia();
  return "Sucesso";
}

o facade
public void atualiza(Ocorrencia o) {
  sf = new AnnotationConfiguration().configure().buildSessionFactory();
  session = sf.openSession();
  tx = session.beginTransaction();
  ocorrenciaDAO = new OcorrenciaDAO(session, Ocorrencia.class);
  this.ocorrenciaDAO.merge(o);
  tx.commit();
  session.close();
}

o DAO
public void merge(T t) {
  logger.info("Salvando ou atualizando " + t);
  session.merge(t);
}

No DAO o realmente esta sendo utilizado é o merge().


-- a classe endereço para agente avaliar se tem algo errado

O bean
  private BairroFacade listaBairro;
  private EnderecoFacade listaRua;
  private List<SelectItem> items = null;
  private List<SelectItem> itensBairro = new ArrayList<SelectItem>();
  private List<SelectItem> itensRua = new ArrayList<SelectItem>();
  private Long idBairro = (long) 0;

  public List<SelectItem> getComboBairros() {
    listaBairro = new BairroFacadeImpl();
    itensBairro = new ArrayList<SelectItem>();
    itensBairro.add(new SelectItem("", "Selecione um bairro"));
    for (Bairro bairro : listaBairro.lista()) {
      itensBairro.add(new SelectItem(bairro.getId().toString(), bairro.getBairro()));
    }
    return itensBairro;
  }

  public List<SelectItem> getComboEnderecos() {
    listaRua = new EnderecoFacadeImpl();
    itensRua.add(new SelectItem("", "Selecione um logradouro"));
    for (Endereco endereco : listaRua.pesquisaEnderecoByBairro(idBairro)) {
      itensRua.add(new SelectItem(endereco.getId().toString(), endereco.getEndereco()));
    }
    return itensRua;
  }

-- ( o obejto ou apenas o id)?
Segundo alguns prints q dei quando tava testando ele pegava o objeto.

O que mais poderia ta fornecendo para ajudar?

grato pela atenção
Responder

10/12/2010

Rodrigo Andrade

Bom dia, estive viajando e não deu mais para colaborar mas vamos lá...
Vamos fazer uns teste:
Tira o toString dos métodos de combo como por exemplo: " itensBairro.add(new SelectItem(bairro.getId().toString(), bairro.getBairro()));"
Depois coloca um System out logo após o início do método merge, para ver se ele está sendo executado:
ublic String merge() {       
  System.out.println("Estou sendo executado!");
  OcorrenciaFacade ocorrenciaService = new OcorrenciaFacadeImpl();
  ocorrenciaService.atualiza(this.ocorrencia);
  this.ocorrencia = new Ocorrencia();
  return "Sucesso";
}
A seguir, bem verifiquei que o seu bean atualiza um endereço pelo combo netão, vc pode fazer de duas formas, ou vc usa uma converter para fazer com que ele pegue aquele id de endereço selecionado, vá no banco faça uma consulta e te retorne o objeto ou vc mesmo faz isso antes de realizar o atualizar, entendeu?

Responder

10/12/2010

Dyego Carmo

O problema é que uma ocorrencia deve ter um endereco e o endereco DEVE estar setando a OCORRENCIA , senao o hibernate nao persiste mesmo.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar