无法更新foreignkey字段javax.el.E​​LException:value =“#{recetteBean.recette.compte.idCompte}”:在Comptebancaire类型上写'idCompte'时出错

时间:2014-06-09 18:47:57

标签: hibernate jsf java-ee primefaces

我有两个表:CompteBancaire(idCompte,libelleCompte,montantCompte)Recette(idRecette,libelleRecette,MantantRecette,DateRecette,idCompte) idCompte是引用Compte的外键。我有一个显示idRecettelibelleRecetteMantantRecetteDateRecette的DataTable,之后我想更新该行,以便我可以添加idCompte。但我有一个问题,idCompte没有得到更新。

09-Jun-2014 18:53:27.715 SEVERE [http-nio-8084-exec-58] com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError javax.faces.component.UpdateModelException: javax.el.ELException: /index.xhtml @69,72 value="#{recetteBean.recette.compte.idCompte}": Error writing 'idCompte' on type net.vo.Comptebancaire_$$_javassist_2
    at javax.faces.component.UIInput.updateModel(UIInput.java:867)
    at javax.faces.component.UIInput.processUpdates(UIInput.java:749)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1286)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1286)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1286)
    at org.primefaces.component.dialog.Dialog.processUpdates(Dialog.java:375)
    at javax.faces.component.UIForm.processUpdates(UIForm.java:281)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1286)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1286)
    at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1254)
    at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
    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.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.el.ELException: /index.xhtml @69,72 value="#{recetteBean.recette.compte.idCompte}": Error writing 'idCompte' on type net.vo.Comptebancaire_$$_javassist_2
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:139)
    at javax.faces.component.UIInput.updateModel(UIInput.java:832)
    ... 37 more
Caused by: javax.el.ELException: Error writing 'idCompte' on type net.vo.Comptebancaire_$$_javassist_2
    at javax.el.BeanELResolver.setValue(BeanELResolver.java:145)
    at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
    at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
    at org.apache.el.parser.AstValue.setValue(AstValue.java:201)
    at org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:260)
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
    ... 38 more
Caused by: java.lang.Exception
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:182)
    at net.vo.Comptebancaire_$$_javassist_2.setIdCompte(Comptebancaire_$$_javassist_2.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at javax.el.BeanELResolver.setValue(BeanELResolver.java:134)
    ... 43 more

有我的代码。 recette.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
      <h:form id="form">
          <p:dataTable id="listeRecettes" var="listeRecette" value="#{recetteBean.listeRecettes}" editable="true" style="margin-bottom:10px" rowKey="#{listeRecette.idRecette}" selection="#{recetteBean.recette}" selectionMode="single">
       <f:facet name="header">
           Liste des recettes
       </f:facet>

       <p:ajax event="rowEdit" listener="#{dtEditView.onRowEdit}" />
       <p:ajax event="rowEditCancel" listener="#{dtEditView.onRowCancel}"/>

       <p:column headerText="N° Recette">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeRecette.idRecette}" /></f:facet>
               <f:facet name="input"><p:inputText id="modelInput" value="#{listeRecette.idRecette}" style="width:100%"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Libellé Recette">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeRecette.libelleRecette}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeRecette.libelleRecette}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Montant Recette">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeRecette.montantRecette}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeRecette.montantRecette}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>
        <p:column headerText="Date recette">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{listeRecette.dateRecette}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{listeRecette.dateRecette}" style="width:100%" label="Year"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column style="width:32px" headerText="Modification">
           <p:rowEditor />
       </p:column>
   </p:dataTable>
   <p:commandButton value="View" update="recetteDetail" icon="ui-icon-search" oncomplete="PF('recetteDialog').show()" styleClass="ui-priority-primary" />
         <p:dialog header="Recette Info" widgetVar="recetteDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
        <p:outputPanel id="recetteDetail" style="text-align:center;">
            <p:panelGrid  columns="2" rendered="#{not empty recetteBean.recette}" columnClasses="label,value">

                <h:outputText value="Id:" />
                <h:outputText value="#{recetteBean.recette.idRecette}" />

                <h:outputText value="Libelle" />
                <h:outputText value="#{recetteBean.recette.libelleRecette}" />

                <h:outputText value="Date:" />
                <h:outputText value="#{recetteBean.recette.dateRecette}" />

                <h:outputText value="Montant:" />
                <p:inputText value="#{recetteBean.recette.montantRecette}"/>

          <h:outputText value="Compte Bancaire : " />
      <p:inputText value="#{recetteBean.recette.compte.idCompte}"/>

                <p:commandButton value="Valider" update="listeRecettes" icon="ui-icon-search" actionListener="#{recetteBean.update()}" styleClass="ui-priority-primary" />

            </p:panelGrid>
        </p:outputPanel>
    </p:dialog>
        </h:form>
    </h:body>
</html>

CompteBancaireBean.java

package controller;

import java.util.List;
import javax.annotation.PostConstruct;
import model.services.ComptebancaireMetier;
import net.vo.Comptebancaire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class CompteBancaireBean implements java.io.Serializable{

    @Autowired
    private ComptebancaireMetier compteBancaireMetier;
    private List<Comptebancaire> listeCompteBancaires;
    private static int idCompte;
    private String libelleCompte;
    private Integer montantCompte;


    @PostConstruct
    public void init() {
        listeCompteBancaires = compteBancaireMetier.getAllComptebancaires();
    }
    public static int submit()
    {
        System.out.println("compte"+idCompte);
        return idCompte;
    }
    public List<Comptebancaire> getListeAnnees() {
        listeCompteBancaires = compteBancaireMetier.getAllComptebancaires();
        return listeCompteBancaires;
    }


    public void insert()
    {
        Comptebancaire compteBancaire = new Comptebancaire();
        compteBancaire.setIdCompte(getIdCompte());
        compteBancaire.setLibelleCompte(getLibelleCompte());
        compteBancaire.setMontantCompte(getMontantCompte());
    compteBancaireMetier.insert(compteBancaire);
    }

    public ComptebancaireMetier getCompteBancaireMetier() {
        return compteBancaireMetier;
    }

    public void setCompteBancaireMetier(ComptebancaireMetier compteBancaireMetier) {
        this.compteBancaireMetier = compteBancaireMetier;
    }

    public List<Comptebancaire> getListeCompteBancaires() {
        return listeCompteBancaires;
    }

    public void setListeCompteBancaires(List<Comptebancaire> listeCompteBancaires) {
        this.listeCompteBancaires = listeCompteBancaires;
    }

    public int getIdCompte() {
        return idCompte;
    }

    public void setIdCompte(int idCompte) {
        this.idCompte = idCompte;
    }

    public String getLibelleCompte() {
        return libelleCompte;
    }

    public void setLibelleCompte(String libelleCompte) {
        this.libelleCompte = libelleCompte;
    }

    public Integer getMontantCompte() {
        return montantCompte;
    }

    public void setMontantCompte(Integer montantCompte) {
        this.montantCompte = montantCompte;
    }

}

RecetteBean.java

package controller;

import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import model.services.ComptebancaireMetier;
import model.services.RecetteMetier;
import net.vo.Comptebancaire;
import net.vo.Recette;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class RecetteBean {

    @Autowired
    private RecetteMetier recetteMetier;
    private List<Recette> ListeRecettes;
    private Recette recette;
    private int idRecette;
    private Comptebancaire compte;
    private Date dateRecette;
    private Integer montantRecette;
    private String libelleRecette;
    private ComptebancaireMetier comptebancaireMetier;
    @PostConstruct
    public void init() {
        ListeRecettes = recetteMetier.getAllRecettes();
    }

    public Recette getRecette() {
        return recette;
    }

    public void setRecette(Recette recette) {
        this.recette = recette;
    }
    public void deleteRecette() {
        ListeRecettes.remove(recette);
        recette = null;
    }
    public RecetteMetier getRecetteMetier() {
        return recetteMetier;
    }

    public void setRecetteMetier(RecetteMetier recetteMetier) {
        this.recetteMetier = recetteMetier;
    }

    public List<Recette> getListeRecettes() {
        return ListeRecettes;
    }

    public void setListeRecettes(List<Recette> ListeRecettes) {
        this.ListeRecettes = ListeRecettes;
    }

    public int getIdRecette() {
        return idRecette;
    }

    public void setIdRecette(int idRecette) {
        this.idRecette = idRecette;
    }

    public Comptebancaire getCompte() {
        return compte;
    }

    public void setCompte(Comptebancaire compte) {
        this.compte = compte;
    }

    public Date getDateRecette() {
        return dateRecette;
    }

    public void setDateRecette(Date dateRecette) {
        this.dateRecette = dateRecette;
    }

    public Integer getMontantRecette() {
        return montantRecette;
    }

    public void setMontantRecette(Integer montantRecette) {
        this.montantRecette = montantRecette;
    }

    public String getLibelleRecette() {
        return libelleRecette;
    }

    public void setLibelleRecette(String libelleRecette) {
        this.libelleRecette = libelleRecette;
    }
    public void update()
{
    Recette r = recetteMetier.getRecette(getRecette().getIdRecette());
    r.setMontantRecette(getRecette().getMontantRecette());
    System.out.println(getRecette().getCompte().getIdCompte());
    r.setCompte(getRecette().getCompte());
    recetteMetier.update(recette);
}
}

0 个答案:

没有答案