Bonjour à la communauté,
je développe une application java EE et je désir supprimer une ligne dans une DataTable (j'arrive à enregistrer mais pas à supprimer).
Dans mon tableau, j'ai un bouton pour la suppression lorsque je clique dessus , je récupère la ligne concernée (indexLigne) et j'appelle une boite de dialogue pour la suppression.Si l'utilisateur clique sur oui alors j'appelle la méthode supprimerLigneSortie.
Voici mon code :
mon managed bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| @ManagedBean(name = "sortieMB")
@SessionScoped
public class SortieMB implements Serializable {
private static final long serialVersionUID = 1L;
private TypeSortie typeSortie;
private List<TypeSortie> listeTypeSortieAll;
private Sortie sortie;
private List<Sortie> listeSortieAll;
private Integer idCommune;
private int indexLigne;
/**
* Creates a new instance of SortieMB
*/
@Inject transient ParametreService parametreService;
public SortieMB() {
}
public int getIndexLigne() {
return indexLigne;
}
public void setIndexLigne(int indexLigne) {
this.indexLigne = indexLigne;
}
public Sortie getSortie() {
if (sortie==null){
sortie=new Sortie();
sortie.setDateSortie(new Date());
}
return sortie;
}
public void setSortie(Sortie sortie) {
this.sortie = sortie;
}
public List<Sortie> getListeSortieAll() {
if(listeSortieAll==null){
listeSortieAll=parametreService.getAllListeSortie();
}
return listeSortieAll;
}
public void setListeSortieAll(List<Sortie> listeSortieAll) {
this.listeSortieAll = listeSortieAll;
}
public Integer getIdCommune() {
return idCommune;
}
public void setIdCommune(Integer idCommune) {
this.idCommune = idCommune;
}
public String ajouterSortie(){
sortie=null;
return null;
}
public String supprimerLigneSortie() {
listeSortieAll.remove(indexLigne);
if (sortie.getIdSortie() != null) {
parametreService.supprimer(sortie);
}
return null;
}
public String enregistrerSortie(){
if(sortie.getDateSortie()==null){
MessagesJsf.addErrorMessage("Veuillez choisir la date de la sortie!");
return null;
}
if(StringUtils.isEmptyTrim(sortie.getVillageSortie())){
MessagesJsf.addErrorMessage("Veuillez saisir le village concerné!");
return null;
}
if(StringUtils.isEmptyTrim(sortie.getObjectifSortie())){
MessagesJsf.addErrorMessage("Veuillez saisir l'objectif de la sortie!");
return null;
}
if(idCommune==null || idCommune==-1){
MessagesJsf.addErrorMessage("Veuillez choisir la commune!");
return null;
}
boolean nouveau = sortie.getIdSortie()== null;
sortie.setCommune(parametreService.getCommune(idCommune));
parametreService.enregistrer(sortie, nouveau);
if(listeSortieAll==null){
listeSortieAll = new ArrayList<>();
}
if(nouveau){
listeSortieAll.add(0,sortie);
}
MessagesJsf.addInfoMessage("Opération exécuter avec succès!");
return null;
}
} |
ma classe ParametreServiceImpl
1 2 3 4 5 6 7 8 9
| public class ParametreServiceImpl extends PhaCrudImpl implements ParametreService {
//recuperation de la liste des sorties pour affichage
@Override
public List<Sortie> getAllListeSortie(){
return parametreDao.getAllListeSortie();
}
} |
ma classe PhaCrudImpl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
public class PhaCrudImpl {
@PersistenceContext
protected EntityManager em;
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public void add(Object objet) {
em.persist(objet);
}
public void update(Object objet) {
em.merge(objet);
}
public void delete(Object objet) {
em.remove(objet);
}
public Object getObjectById(Class classe, Object id) {
return em.find(classe, id);
}
@Transactional
public boolean enregistrer(Object objet, boolean nouveau) {
if (nouveau) {
em.persist(objet);
} else {
em.merge(objet);
}
return true;
}
@Transactional
public boolean supprimer(Object objet) {
em.remove(objet);
return true;
}
} |
ma classe ParametreService
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public interface ParametreService {
//pour l'affichage de la liste;
public List<Sortie> getAllListeSortie();
//enregistrement
public boolean enregistrer(Object objet, boolean nouveau);
//suppression
public boolean supprimer(Object objet);
} |
j’obtiens l'erreur ci dessous
javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
et voici la trace complète
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
javax.faces.el.EvaluationException: javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:724)
Caused by: javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
at org.glassfish.cdi.transaction.TransactionalInterceptorRequired.transactional(TransactionalInterceptorRequired.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNext(AbstractInterceptionChain.java:93)
at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNextInterceptor(AbstractInterceptionChain.java:78)
at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:48)
at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:41)
at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:53)
at pha.service.impl.ParametreServiceImpl$Proxy$_$$_WeldSubclass.supprimer(Unknown Source)
at pha.view.SortieMB.supprimerLigneSortie(SortieMB.java:332)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at javax.el.ELUtil.invokeMethod(ELUtil.java:326)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:536)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:269)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 35 more
Caused by: javax.transaction.RollbackException: Transaction marquée pour annulation.
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:445)
at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:854)
at com.sun.enterprise.transaction.TransactionManagerHelper.commit(TransactionManagerHelper.java:81)
at org.glassfish.cdi.transaction.TransactionalInterceptorRequired.transactional(TransactionalInterceptorRequired.java:99)
... 60 more |
Partager