Gives success message that saved, not error message, but in bank is not saved - jsf

0

My code is giving success message in saving the record, but in reality it is not saving, I already checked the database, it is not generating error message, and it shows the code is all right, what will it be What happens if this happens?

My Bean class

package br.com.terezinha.imobiliaria.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.terezinha.imobiliaria.model.Cidade;
import br.com.terezinha.imobiliaria.repository.Cidades;
import br.com.terezinha.imobiliaria.services.CadastroCidadeService;
import br.com.terezinha.imobiliaria.util.FacesUtil;

@Named
@ViewScoped
public class CadastroCidadeBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Cidade cidade;


    @Inject
    private CadastroCidadeService cadastroCidadeService;


    @Inject
    private Cidades cidades;

    public CadastroCidadeBean() {
        cidade = new Cidade();
    }

//    public void inicializar() {
//        System.out.println("iniciaando ........");
//        if (FacesUtil.isNotPostback()) {
//            todasCidades = cidades.raizesC();
//        }
//    }
//    

    public void salvar(){
        this.cidade = cadastroCidadeService.salvar(cidade);
        FacesUtil.addInfoMessage("Cidade salvo com sucesso");
    }

    public Cidade getCidade() {
        return cidade;
    }

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


    public Cidades getCidades() {
        return cidades;
    }

    public void setCidades(Cidades cidades) {
        this.cidades = cidades;
    }

}

My class that entered the registry;

package br.com.terezinha.imobiliaria.repository;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;

import br.com.terezinha.imobiliaria.model.Cidade;

public class Cidades implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    private EntityManager manager;

    public Cidade porId(Long id) {
        return manager.find(Cidade.class, id);

    }


    public List<Cidade> raizesC(){
        return manager.createQuery("from Cidade order by nome", Cidade.class).getResultList();
    }



    public Cidade guardar(Cidade cidade) {
        return manager.merge(cidade);
    }



}

///////////////////////////////

*/
private static final long serialVersionUID = 1L;


@Inject
private Cidades cidades;


@Transactional
public  Cidade salvar(Cidade cidade){
    return cidades.guardar(cidade);
}

My page

<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

    <ui:define name="titulo">Novo produto</ui:define>

    <ui:define name="corpo">



        <h:form>

            <h1>Nova Cidade</h1>

            <p:messages autoUpdate="true" closable="true" />

            <p:toolbar style="margin-top: 20px">
                <p:toolbarGroup>
                    <p:button value="Novo" />
                    <p:commandButton value="Salvar" id="botaoSalvar"  action="#{cadastroCidadeBean.salvar}" update="@form"/>
                </p:toolbarGroup>
                <p:toolbarGroup align="right">
                    <p:button value="Pesquisa" />
                </p:toolbarGroup>
            </p:toolbar>

            <p:panelGrid columns="2" id="painel"
                style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
                <p:outputLabel value="Nome da cidade" for="cidade" />
                <p:inputText id="cidade" size="20" maxlength="20"
                    value="#{cadastroCidadeBean.cidade.nome}" />


            </p:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>

The path of my project in the GitHub repository

link

I made these attempts

try one;

public void salvar(){
        this.cidade = cadastroCidadeService.salvar(this.cidade);
        System.out.println("valor da cidade no pacote controller  " + cidade.getNome());
        FacesUtil.addInfoMessage("Cidade salvo com sucesso");
    }

try two;

public Cidade guardar(Cidade cidade) {
     cidade =  manager.merge(cidade);

     System.out.println("valor da cidade no pacote repositório " + cidade.getNome());
    return cidade;
}

try three;

@Transactional
public Cidade salvar(Cidade cidade) {
    cidade = cidades.guardar(cidade);
    System.out.println("valor da cidade no pacote de negotios  " + cidade.getNome());
    return cidade;

}

result;

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
valor da cidade no pacote repositório Caruaru
valor da cidade no pacote de negotios  Caruaru
valor da cidade no pacote controller  Caruaru
    
asked by anonymous 05.10.2015 / 13:27

2 answers

1

From what I noticed by the code, its programming logic, it is displaying the message "Saved" without even testing if this object was actually saved. You are probably forgetting to handle Database Transactions, as I have not seen in your code any Initialization and Commit handling of database transactions. Try to start a transaction and then commit to the method the city is saved in.

    
05.10.2015 / 13:46
0

In the save method of class city is missing

transaction.begin();
if(merge()){
  transaction.commit();
}else{
  transaction.rooback();
}
    
05.10.2015 / 18:32