Oi, tenho o seguinte problema (Onde contaPai) não está gravando e não mensagem alguma de erro :
Alguém poderia me ajudar a descobrir o que se passa, eu estou usando o Glassfish 3.1, NetBeans 6.9, Mojarra 2.0.4, Primefaces 2.2, Springframework 3.0.5, Hibernate 3.0.6 Final
package com.fazsaofrancisco.agritech.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* @author Pedro Henrique
* @since 09/01/2011
*/
@Entity
public class CentroCusto implements Serializable{
private static final long serialVersionUID = 8346008071112411471L;
@Id
@Column(length=20)
private String codigo;
private String descricao;
@ManyToOne(fetch = FetchType.EAGER)
private CentroCusto contaPai;
private boolean aceitaLanctos;
@Temporal(value = TemporalType.DATE)
private Date dataCadastro;
private boolean unidadeNegocio;
public CentroCusto() {
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getCodigo() {
return codigo;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
public void setContaPai(CentroCusto contaPai) {
if (this.contaPai == null)
this.contaPai = new CentroCusto();
this.contaPai = contaPai;
}
public CentroCusto getContaPai() {
return contaPai;
}
public boolean isAceitaLanctos() {
return aceitaLanctos;
}
public void setAceitaLanctos(boolean aceitaLanctos) {
this.aceitaLanctos = aceitaLanctos;
}
public Date getDataCadastro() {
return dataCadastro;
}
public void setDataCadastro(Date dataCadastro) {
this.dataCadastro = dataCadastro;
}
public boolean isUnidadeNegocio() {
return unidadeNegocio;
}
public void setUnidadeNegocio(boolean unidadeNegocio) {
this.unidadeNegocio = unidadeNegocio;
}
@Override
public String toString() {
return "CentroCusto [codigo=" + codigo + ", descricao=" + descricao
+ ", contaPai=" + contaPai + ", aceitaLanctos=" + aceitaLanctos
+ ", dataCadastro=" + dataCadastro + ", unidadeNegocio="
+ unidadeNegocio + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (aceitaLanctos ? 1231 : 1237);
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
result = prime * result
+ ((contaPai == null) ? 0 : contaPai.hashCode());
result = prime * result
+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
result = prime * result
+ ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result + (unidadeNegocio ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CentroCusto other = (CentroCusto) obj;
if (aceitaLanctos != other.aceitaLanctos)
return false;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
if (contaPai == null) {
if (other.contaPai != null)
return false;
} else if (!contaPai.equals(other.contaPai))
return false;
if (dataCadastro == null) {
if (other.dataCadastro != null)
return false;
} else if (!dataCadastro.equals(other.dataCadastro))
return false;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (unidadeNegocio != other.unidadeNegocio)
return false;
return true;
}
}
DAO
package com.fazsaofrancisco.agritech.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.fazsaofrancisco.agritech.helper.Util;
import com.fazsaofrancisco.agritech.model.CentroCusto;
@Repository("centroCustoDAO")
@Scope("singleton")
public class CentroCustoDAOImpl extends HibernateDaoSupport implements CentroCustoDAO{
private static final long serialVersionUID = 5324240665664157506L;
@Autowired
public CentroCustoDAOImpl(SessionFactory sessionFactory) {
super();
setSessionFactory(sessionFactory);
}
public void store(CentroCusto object) {
try {
object.setDataCadastro(Util.DataAtual());
getHibernateTemplate().saveOrUpdate(object);
} catch (Exception e) {
throw new DAOServiceException("Erro ao gravar : " + object, e);
}
}
public void remove(CentroCusto object) {
try {
getHibernateTemplate().delete(object);
} catch (Exception e) {
throw new DAOServiceException("Erro ao apagar : " + object, e);
}
}
public CentroCusto findByPrimaryKey(Long pk) {
CentroCusto grp;
try {
grp = getHibernateTemplate().load(CentroCusto.class, pk);
} catch (Exception e) {
throw new DAOServiceException(
"Erro ao tentar localizar "+this.getClass().getName()+" pela pk : " + pk, e);
}
return grp;
}
public CentroCusto findByDescricao(String d) {
CentroCusto grp = null;
try {
grp = (CentroCusto) getHibernateTemplate().findByNamedQueryAndNamedParam("consultaPorDescricao", "descri", d).get(0);
} catch (Exception e) {
throw new DAOServiceException("Erro ao tentar localizar "+this.getClass().getName()+" pela Descricao : " + d, e);
}
return grp;
}
public List<CentroCusto> loadAll() {
List<CentroCusto> lista = null;
try {
lista = (List<CentroCusto>) getHibernateTemplate().loadAll(CentroCusto.class);
} catch (Exception e) {
throw new DAOServiceException(
"Erro ao tentar retornar todos os registros de "+this.getClass().getName()+".", e);
}
return lista;
}
@Override
public CentroCusto findByPrimaryKey(String pk) {
CentroCusto cc;
try {
cc = getHibernateTemplate().load(CentroCusto.class, pk);
} catch (Exception e) {
throw new DAOServiceException(
"Erro ao tentar localizar "+this.getClass().getName()+" pela pk : " + pk, e);
}
return cc;
}
}
ManagedBean
package com.fazsaofrancisco.agritech.controller;
import java.io.Serializable;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.fazsaofrancisco.agritech.dao.CentroCustoDAO;
import com.fazsaofrancisco.agritech.helper.JSFUtil;
import com.fazsaofrancisco.agritech.helper.Util;
import com.fazsaofrancisco.agritech.model.CentroCusto;
@Controller("centroCustoMB")
@Scope("view")
public class CentroCustoMB implements ControllerService, Serializable {
private static final long serialVersionUID = -3240355618051465436L;
private static final Logger log = Logger.getLogger(CentroCustoMB.class);
private CentroCustoDAO centroCustoDAO;
private CentroCusto obj;
private List<CentroCusto> lista;
@Autowired
public CentroCustoMB(CentroCustoDAO centroCustoDAO){
this.centroCustoDAO = centroCustoDAO;
this.atualizaTela();
}
public CentroCusto getObj() {
return obj;
}
public void setObj(CentroCusto obj) {
this.obj = obj;
}
public List<CentroCusto> getLista() {
return lista;
}
public void setLista(List<CentroCusto> lista) {
this.lista = lista;
}
public List<CentroCusto> getCentrosCusto(){
return centroCustoDAO.loadAll();
}
@Override
public String inserir() {
log.info("Inserindo :"+obj);
atualizaTela();
return "centrocusto/form.xhtml";
}
@Override
public void salvar() {
try {
log.info("Salvando :"+obj);
centroCustoDAO.store(obj);
JSFUtil.addMessage(obj.getDescricao() + ", salvo com sucesso !", "Operação bem sucedida ! " + obj);
atualizaTela();
} catch (Exception e) {
JSFUtil.addMessageErro("Erro ao tentar incluir : " + obj);
}
}
@Override
public void apagar() {
try{
log.info("--------------> Apagando :"+obj);
centroCustoDAO.remove(getObj());
JSFUtil.addMessage(obj.getDescricao()+", apagado com sucesso !" , "Operação bem sucedida !" + obj);
atualizaTela();
}
catch (Exception e){
JSFUtil.addMessageErro("Erro ao tentar apagar : " + obj);
}
}
@Override
public void atualizaTela() {
log.info("--------------> Atualizar a tela ");
this.obj = new CentroCusto();
// Está sendo feito aqui pois se fosse feito no modelo ao criar geraria recursividade.
//this.obj.setContaPai(new CentroCusto());
this.lista = centroCustoDAO.loadAll();
}
@Override
public CentroCusto getNovo() {
CentroCusto cc = new CentroCusto();
cc.setDataCadastro(Util.DataAtual());
return cc;
}
public void teste(){
CentroCusto c = new CentroCusto();
c.setCodigo("01.10.10");
c.setDescricao("CC de teste automatizado");
CentroCusto cPai = centroCustoDAO.findByPrimaryKey("01");
c.setContaPai(cPai);
c.setAceitaLanctos(true);
centroCustoDAO.store(c);
}
}
View
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>#{msgs.centroscusto}</title>
</h:head>
<h:body>
<h:form id="frmPrincipal">
<p:growl id="growl" />
<p:panel id="Painel" header="#{msgs.centroscusto}">
<p:focus for="iCCCodigo"/>
<h:panelGrid columns="2">
<h:outputText id="iCCCodigo" value="#{msgs['centroscusto.codigo']}" />
<p:inputMask value="#{centroCustoMB.obj.codigo}" mask="99.99.99.99" required="true" label="Código" />
<h:outputText value="#{msgs['centroscusto.descricao']}" />
<h:inputText value="#{centroCustoMB.obj.descricao}" required="true" label="Descrição"/>
<h:outputText value="#{msgs['centroscusto.contapai']}" />
<h:selectOneMenu value="#centroCustoMB.obj.contaPai.codigo" >
<f:selectItem />
<f:selectItems value="#{centroCustoMB.centrosCusto}" var="c" itemValue="#{c.codigo}" itemLabel="#{c.codigo} : #{c.descricao}"/>
</h:selectOneMenu>
<h:outputText value="#{msgs['centroscusto.datacadastro']}" />
<p:calendar value="#{centroCustoMB.obj.dataCadastro}" disabled="true"/>
<h:outputText value="#{msgs['centroscusto.aceitalancamentos']}" />
<h:selectBooleanCheckbox value="#{centroCustoMB.obj.aceitaLanctos}" />
</h:panelGrid>
</p:panel>
<p:panel id="toolbar">
<h:panelGrid columns="2">
<p:commandButton value="Salvar" action="#{centroCustoMB.salvar}" update="frmPrincipal" image="ui-icon-disk" />
<p:commandButton value="Cancelar" action="#{indexController.setCentrosCustoList}" update="frmPrincipal" image="ui-icon-cancel" />
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>
