Olá pessoal!
Estou desenvolvendo uma aplicaççao usando spring ioc para injeção de dependencia e inversão juntamente com JSF2, mas está acontecendo um problema, ao persistri meu boleltim da o seguinte erro:
29/05/2012 12:12:50 com.sun.faces.application.ActionListenerImpl processAction
GRAVE: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
javax.faces.el.EvaluationException: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
at javax.faces.component.UICommand.broadcast(UICommand.java:311)
at javax.faces.component.UIData.broadcast(UIData.java:912)
at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.persist(HibernateTemplate.java:793)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:53)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy23.salvar(Unknown Source)
at br.com.estub.boletim.service.BoletimService.salvar(BoletimService.java:38)
at br.com.estub.boletim.mb.BoletimMB.acaoSalvar(BoletimMB.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
... 26 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
at org.springframework.orm.hibernate3.HibernateTemplate$21.doInHibernate(HibernateTemplate.java:796)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 51 more
29/05/2012 12:12:50 com.sun.faces.lifecycle.InvokeApplicationPhase execute
AVISO: #{boletimMB.acaoSalvar}: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
javax.faces.FacesException: #{boletimMB.acaoSalvar}: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114)
at javax.faces.component.UICommand.broadcast(UICommand.java:311)
at javax.faces.component.UIData.broadcast(UIData.java:912)
at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
... 25 more
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.persist(HibernateTemplate.java:793)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:53)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy23.salvar(Unknown Source)
at br.com.estub.boletim.service.BoletimService.salvar(BoletimService.java:38)
at br.com.estub.boletim.mb.BoletimMB.acaoSalvar(BoletimMB.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
... 26 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
at org.springframework.orm.hibernate3.HibernateTemplate$21.doInHibernate(HibernateTemplate.java:796)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 51 more
javax.faces.FacesException: #{boletimMB.acaoSalvar}: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:85)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.FacesException: #{boletimMB.acaoSalvar}: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114)
at javax.faces.component.UICommand.broadcast(UICommand.java:311)
at javax.faces.component.UIData.broadcast(UIData.java:912)
at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
... 19 more
Caused by: javax.faces.el.EvaluationException: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
... 25 more
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.persist(HibernateTemplate.java:793)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:53)
at br.com.estub.boletim.dao.BoletimDAO.salvar(BoletimDAO.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy23.salvar(Unknown Source)
at br.com.estub.boletim.service.BoletimService.salvar(BoletimService.java:38)
at br.com.estub.boletim.mb.BoletimMB.acaoSalvar(BoletimMB.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
... 26 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.estub.boletim.modelo.Boletim
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
at org.springframework.orm.hibernate3.HibernateTemplate$21.doInHibernate(HibernateTemplate.java:796)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 51 more
Ele diz que meu objeto esta detached, mas não entendo pois o spring trata isso pra mim, se não tivesse usando um framework que cuidasse da minha transação tudo bem teria que dar um commit e tudo mais. Outra coisa eu cheguei a executar a aplicação algumas vezes e deu certo, mas agora está dando esse erro o pior que não mexi em nada.
Segue minhas classes:
package br.com.estub.boletim.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Contrato implements Serializable {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, length = 10)
private String codigo;
@OneToMany(mappedBy = "contrato")
private List<Boletim> boletins = new ArrayList<Boletim>();
public Long getId() {
return id;
}
public String getCodigo() {
return codigo;
}
public void setId(Long id) {
this.id = id;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public List<Boletim> getBoletims() {
return boletins;
}
public void setBoletims(List<Boletim> boletims) {
this.boletins = boletims;
}
}
package br.com.estub.boletim.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.validation.Valid;
@Entity
public class Boletim implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, length = 10)
private String codigo;
@ManyToOne(cascade = CascadeType.PERSIST)
private Contrato contrato;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "boletim")
private List<ItemBoletim> itens = new ArrayList<ItemBoletim>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public List<ItemBoletim> getItens() {
return itens;
}
public void setItens(List<ItemBoletim> itens) {
this.itens = itens;
}
public Contrato getContrato() {
return contrato;
}
public void setContrato(Contrato contrato) {
this.contrato = contrato;
}
}
package br.com.estub.boletim.modelo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class ItemBoletim implements Serializable {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
@Temporal(TemporalType.DATE)
private Calendar data = Calendar.getInstance();
private BigDecimal frete;
private BigDecimal custoDeslocamento;
private BigDecimal maoDeObraTercerizada;
private BigDecimal refeicao;
private BigDecimal hospedagem;
private BigDecimal documentacao;
private BigDecimal outrasDespesas;
@ManyToOne
private Boletim boletim;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public BigDecimal getFrete() {
return frete;
}
public void setFrete(BigDecimal frete) {
this.frete = frete;
}
public BigDecimal getCustoDeslocamento() {
return custoDeslocamento;
}
public void setCustoDeslocamento(BigDecimal custoDeslocamento) {
this.custoDeslocamento = custoDeslocamento;
}
public BigDecimal getMaoDeObraTercerizada() {
return maoDeObraTercerizada;
}
public void setMaoDeObraTercerizada(BigDecimal maoDeObraTercerizada) {
this.maoDeObraTercerizada = maoDeObraTercerizada;
}
public BigDecimal getRefeicao() {
return refeicao;
}
public void setRefeicao(BigDecimal refeicao) {
this.refeicao = refeicao;
}
public BigDecimal getHospedagem() {
return hospedagem;
}
public void setHospedagem(BigDecimal hospedagem) {
this.hospedagem = hospedagem;
}
public BigDecimal getDocumentacao() {
return documentacao;
}
public void setDocumentacao(BigDecimal documentacao) {
this.documentacao = documentacao;
}
public BigDecimal getOutrasDespesas() {
return outrasDespesas;
}
public void setOutrasDespesas(BigDecimal outrasDespesas) {
this.outrasDespesas = outrasDespesas;
}
public Boletim getBoletim() {
return boletim;
}
public void setBoletim(Boletim boletim) {
this.boletim = boletim;
}
}
DAO
package br.com.estub.boletim.dao;
import java.io.Serializable;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import br.com.estub.boletim.modelo.Boletim;
@Repository("boletimDao")
@Transactional(readOnly = false)
public class BoletimDAO implements Serializable, IDAO<Boletim> {
private static final long serialVersionUID = 1L;
private HibernateTemplate template;
@Autowired
public BoletimDAO(HibernateTemplate hibernateTemplate) {
this.template = hibernateTemplate;
}
@Override
public void alterar(Boletim t) {
this.template.update(t);
}
@Override
public Boletim buscarPorId(Long id) {
return (Boletim) this.template.get(Boletim.class, id);
}
@Override
public List<Boletim> listar() {
List<Boletim> boletins = this.template.find("from Boletim");
return boletins;
}
@Override
public void remover(Boletim t) {
this.template.delete(t);
}
@Override
public void salvar(Boletim t) {
this.template.persist(t);
}
}
Serviço
package br.com.estub.boletim.service;
import java.io.Serializable;
import java.util.List;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import br.com.estub.boletim.dao.IDAO;
import br.com.estub.boletim.modelo.Boletim;
@Service("boletimService")
public class BoletimService implements Serializable{
@Qualifier("boletimDAO")
private IDAO<Boletim> dao;
public IDAO<Boletim> getDao() {
return dao;
}
public void setDao(IDAO<Boletim> dao) {
this.dao = dao;
}
public Boletim getBuscaPorId(Long id) {
return dao.buscarPorId(id);
}
public List<Boletim> listaTodos() {
return dao.listar();
}
public void salvar(Boletim boletim) {
dao.salvar(boletim);
}
public void remover(Boletim boletim) {
dao.remover(boletim);
}
public void altera(Boletim boletim) {
dao.alterar(boletim);
}
}
Managed Bean
package br.com.estub.boletim.mb;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import br.com.estub.boletim.modelo.Boletim;
import br.com.estub.boletim.modelo.Contrato;
import br.com.estub.boletim.modelo.ItemBoletim;
import br.com.estub.boletim.service.BoletimService;
import br.com.estub.boletim.util.JSFUtil;
@ManagedBean(name = "boletimMB")
@ViewScoped
public class BoletimMB implements Serializable {
private static final long serialVersionUID = 1L;
@ManagedProperty("#{boletimService}")
private BoletimService modelo;
private Boletim boletim = new Boletim();
private List<Boletim> boletins = null;
private ItemBoletim item = new ItemBoletim();
private Contrato contrato = new Contrato();
public BoletimService getModelo() {
return modelo;
}
public void setModelo(BoletimService modelo) {
this.modelo = modelo;
}
public Boletim getBoletim() {
return boletim;
}
public void setBoletim(Boletim boletim) {
this.boletim = boletim;
}
public List<Boletim> getBoletins() {
if (this.boletins == null){
this.boletins = modelo.listaTodos();
}
return this.boletins;
}
public void setBoletins(List<Boletim> boletins) {
this.boletins = boletins;
}
public ItemBoletim getItem() {
return item;
}
public void setItem(ItemBoletim item) {
this.item = item;
}
public Contrato getContrato() {
return contrato;
}
public void setContrato(Contrato contrato) {
this.contrato = contrato;
}
public String acaoSalvar() {
System.out.println("*****SALVANDO BOLETIM*****");
this.boletim.setContrato(contrato);
this.modelo.salvar(this.boletim);
this.setBoletim(new Boletim());
return "boletimListar.xhtml";
}
public void alterar() {
this.modelo.altera(boletim);
}
public void guardaItem() {
//this.boletim.setContrato(contrato);
this.item.setBoletim(boletim);
this.boletim.getItens().add(this.item);
this.item = new ItemBoletim();
}
public void acaoExcluirItem(){
Long id = JSFUtil.getParametroLong("itemId");
this.boletim.getItens().remove(id);
}
public String acaoAbrirAlteracao() {
Long id = JSFUtil.getParametroLong("boletimId");
Boletim objetoDoBanco = this.modelo.getBuscaPorId(id);
this.setBoletim(objetoDoBanco);
return "boletim";
}
public void limpaFormulario(){
this.setBoletim(new Boletim());
this.setContrato(new Contrato());
this.setItem(new ItemBoletim());
}
}
XHTML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="_templete.xhtml">
<ui:define name="titulo">Cadastra Boletim de Caixa</ui:define>
<ui:define name="conteudo">
<h2></h2>
<h:form id="formulario">
<h:inputHidden id="idUsuario" value="#{boletimMB.boletim.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="Contrato:* " for="contrato" />
<p:inputMask id="contrato" value="#{boletimMB.contrato.codigo}"
mask="a*-99/9999" required="true" label="Campo Contrato" />
<h:outputLabel value="Boletim:* " for="boletim" />
<p:inputText id="boletim" value="#{boletimMB.boletim.codigo}" required="true" label="Campo Boletim"/>
</h:panelGrid>
<h:form id="formularioItem">
<p:fieldset legend="Itens do Boletim" toggleable="true">
<h:panelGrid columns="4">
<h:outputLabel value="Data:* " for="data" />
<p:calendar pattern="dd/MM/yyyy" mode="popup" showOn="button" id="data" required="true" label="Campo Data" value="#{boletimMB.item.data.time}" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:calendar>
<h:outputLabel value="Frete: " for="frete" />
<p:inputText id="frete" value="#{boletimMB.item.frete}" />
<h:outputLabel value="Custo de Deslocamento: " for="cust" />
<p:inputText id="cust" value="#{boletimMB.item.custoDeslocamento}" />
<h:outputLabel value="Mão de Obra Tercerizada: " for="maoDeObra" />
<p:inputText id="maoDeObra" value="#{boletimMB.item.maoDeObraTercerizada}" />
<h:outputLabel value="Refeição: " for="ref" />
<p:inputText id="ref" value="#{boletimMB.item.refeicao}" />
<h:outputLabel value="Hospedagem: " for="hosp" />
<p:inputText id="hosp" value="#{boletimMB.item.hospedagem}"/>
<h:outputLabel value="Documentação: " for="doc" />
<p:inputText id="doc" value="#{boletimMB.item.documentacao}" />
<h:outputLabel value="Outras Despesas: " for="outras" />
<p:inputText id="outras" value="#{boletimMB.item.outrasDespesas}"/>
<f:facet name="footer">
<h:panelGroup layout="block" style="text-align: center">
<p:commandButton ajax="false" action="#{boletimMB.guardaItem}" id="btnIncluir" value="Guarda Item"></p:commandButton>
</h:panelGroup>
</f:facet>
</h:panelGrid>
</p:fieldset>
</h:form>
<p:dataTable value="#{boletimMB.boletim.itens}" var="item" widgetVar="carsTable" paginator="true" rows="3" rowsPerPageTemplate="5,10,15"
selectionMode="single">
<f:facet name="header">
Itens Boletim
</f:facet>
<p:column>
<f:facet name="header">Data</f:facet>
<h:outputText value="#{item.data.time}"></h:outputText>
</p:column>
<p:column headerText="Frete" >
<h:outputText value="#{item.frete}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Custo de Deslocamento" >
<h:outputText value="#{item.custoDeslocamento}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Mão de Obra Tercerizada" >
<h:outputText value="#{item.maoDeObraTercerizada}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="refeicao" >
<h:outputText value="#{item.refeicao}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Hospedagem" >
<h:outputText value="#{item.hospedagem}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Documentação" >
<h:outputText value="#{item.documentacao}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Outras Despesas" >
<h:outputText value="#{item.outrasDespesas}">
<f:convertNumber type="currency" currencySymbol="R$ " locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<h:panelGroup>
<p:commandButton ajax="false" type="push" value="Alterar"
action="#{boletimMB.acaoAbrirAlteracao}" immediate="true"
image="ui-icon-pencil">
<f:param value="#{item.id}" name="itemId" />
</p:commandButton>
<p:commandButton type="button" value="Excluir"
onclick="conf#{item.id}.show()" image="ui-icon-close">
</p:commandButton>
<p:confirmDialog message="Deseja excluir este registro?"
showEffect="bounce" hideEffect="explode"
header="Confirmação de Exclusão" severity="alert"
widgetVar="conf#{item.id}">
<p:commandButton ajax="false" type="push" value="Sim"
action="#{boletimMB.acaoExcluirItem}" immediate="true"
image="ui-icon-check">
<f:param value="#{item.id}" name="itemId" />
</p:commandButton>
<p:commandButton value="Não" onclick="conf#{item.id}.hide()"
type="button" image="ui-icon-close" />
</p:confirmDialog>
</h:panelGroup>
</p:column>
<f:facet name="footer">
<h:panelGroup layout="block" style="text-align: center">
<p:commandButton action="#{boletimMB.acaoSalvar}" value="Salvar">
<!-- <f:ajax execute=":formulario" render=":formulario :formulario:formularioItem"></f:ajax> -->
</p:commandButton>
</h:panelGroup>
</f:facet>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</html>
Alguém pode me ajudar!!!