繁体   English   中英

从jsf页返回的实体保留为空值

[英]the entity returned from the jsf page is persisted with a null value

在我的应用程序中,当我单击添加按钮,然后输入值并尝试将对象保存在数据库中后,该对象将被持久存储为空值,并且在日志文件中没有错误消息。主键是从序列中生成的只需输入名称值。 这是jsf页面的代码

                  <p:inputText id="newnom" value="#{groupeBean.nomValue}"
                        required="true" validatorMessage="Le nom est obligatoire">
                        <f:validateRequired />
                        <p:ajax event="blur" update="newnom_msg"></p:ajax>
                    </p:inputText>
                    <p:message id="newnom_msg" for="newnom" />
                    <p:separator />
                    <h:outputText value="Tous les Champs sont Obligatoire"
                        class="font-custom" style="font-size:9pt"></h:outputText>
                    <br />
                    <p:commandButton value="Enregistrer" update="growl"
                        actionListener="#{groupeBean.create}"
                        oncomplete="GroupeCree.hide()"></p:commandButton>

这是托管bean的代码

                      private Groupe newGroupe=new Groupe();
                      private List<SelectItem> grpsItem;
                       private DataModel groupes;
                       private Groupe editGroupe;
                      private String nomValue;
                      private DaoGroupe gdao= new DaoGroupe();

                      public String getNomValue() {
                 System.out.println("  gnom "+nomValue);
                 return nomValue;
                         }
             public void setNomValue(String nom) {
            System.out.println("  gNOM "+nom);
            this.nomValue = nom;
                   }
                 public String create()
                   {
System.out.println("  creategnom "+nomValue);
newGroupe.setNom(nomValue);
gdao.ajouter(newGroupe);
newGroupe=new Groupe();
groupes.setWrappedData(gdao.selectAll());
FacesMessage msg = new FacesMessage("Ajout effectué avec succés");
FacesContext.getCurrentInstance().addMessage(null, msg); 
        return "list";

                   }
                  public Groupe getNewGroupe() {
               System.out.println("  NEWgrp "+newGroupe.getNom());
                   return newGroupe;}
               public void setNewGroupe(Groupe newGroupe) {
                 this.newGroupe = newGroupe;
                System.out.println("  NEWgrp "+newGroupe.getNom());
                 }

我不是EJB,因为我是初学者,我正在使用dao类,这是它的代码

                    public class DaoGroupe {
                private static final String JPA_UNIT_NAME="Portail";
                 private EntityManager entityManager=Persistence.createEntityManagerFactory(
        JPA_UNIT_NAME).createEntityManager();;
               protected EntityManager getEntityManager() {
            if (entityManager == null) {
        entityManager = Persistence.createEntityManagerFactory(
                JPA_UNIT_NAME).createEntityManager();
                              }
               return entityManager;
                       }

                  public   void ajouter(Groupe g)
              {
        EntityTransaction tx = getEntityManager().getTransaction();
        tx.begin();
        entityManager.persist(g);
        tx.commit();

              }

我不知道怎么了,没有错误消息,我不知道这是什么错误,这是在执行Adarsh告诉我的操作之后的堆栈跟踪

                         2014-01-03T23:06:33.136+0100|Infos: visiting unvisited references
                          2014-01-03T23:06:33.583+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.711+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.786+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.787+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.788+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.789+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.790+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.791+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.792+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.793+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.794+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.795+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.795+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.796+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.797+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.798+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.799+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.800+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.801+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.802+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.803+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.803+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.804+0100|Infos: visiting unvisited references
                  2014-01-03T23:06:33.920+0100|Infos: EJB5181:Portable JNDI names for                    EJB AuthentificationEjb:   [java:global/Portail/AuthentificationEjb!com.portail.beans.AuthentificationEjb, java:global/Portail/AuthentificationEjb]
                 2014-01-03T23:06:35.953+0100|Infos: Registering the Jersey servlet application, named org.eclipse.persistence.jpa.rs.service.JPARSApplication, at the servlet mapping /persistence/*, with the Application class of the same name.
                 2014-01-03T23:06:35.957+0100|Infos: Initialisation de Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) pour le contexte «/Portail»
                  2014-01-03T23:06:36.099+0100|Avertissement: WELD-001529 An InjectionTarget implementation is created for a class org.primefaces.context.PrimeFacesContextFactory which does not have any appropriate constructor.
                 2014-01-03T23:06:36.107+0100|Avertissement: WELD-001529 An InjectionTarget implementation is created for a class org.primefaces.context.PrimePartialViewContextFactory which does not have any appropriate constructor.
                 2014-01-03T23:06:36.427+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                 2014-01-03T23:06:36.427+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «loginfailed.xhtml», pour la navigation depuis «/index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                2014-01-03T23:06:36.428+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                2014-01-03T23:06:36.428+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «loginfailed.xhtml», pour la navigation depuis «/loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                     2014-01-03T23:06:36.428+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                    2014-01-03T23:06:36.429+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «forum.xhtml», pour la navigation depuis «/loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                    2014-01-03T23:06:36.429+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                    2014-01-03T23:06:36.429+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «forum.xhtml», pour la navigation depuis «/loginfailed.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                           2014-01-03T23:06:36.430+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                      2014-01-03T23:06:36.430+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «forum.xhtml», pour la navigation depuis «/index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                       2014-01-03T23:06:36.430+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                           2014-01-03T23:06:36.430+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «forum.xhtml», pour la navigation depuis «/index.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                           2014-01-03T23:06:36.431+0100|Avertissement: JSF1057 : La ressource référencée par from-view-id, «indexAdmin.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée. 
                        2014-01-03T23:06:36.431+0100|Avertissement: JSF1058 : La ressource référencée par to-view-id, «administrateur.xhtml», pour la navigation depuis «/indexAdmin.xhtml», ne commence pas par ’’/’’.  Ce caractère sera ajouté pour vous, mais l’erreur doit être corrigée.
                       2014-01-03T23:06:36.847+0100|Infos: Running on PrimeFaces 4.0
                      2014-01-03T23:06:36.866+0100|Infos: Loading application [Portail] at [/Portail]
                     2014-01-03T23:06:37.021+0100|Infos: Portail was successfully deployed in 5 701 milliseconds.
                      2014-01-03T23:06:38.198+0100|Infos: gnom null
                      2014-01-03T23:06:47.946+0100|Infos: creategnom null
                       2014-01-03T23:06:47.947+0100|Avertissement:                        java.lang.IllegalArgumentException: Object: com.portail.entities.Groupe@24b1fc1d is not a known entity type.
                       javax.el.ELException: java.lang.IllegalArgumentException: Object: com.portail.entities.Groupe@24b1fc1d is not a known entity type.
at com.sun.el.parser.AstValue.invoke(AstValue.java:279)
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 javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:818)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1108)
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: java.lang.IllegalArgumentException: Object: com.portail.entities.Groupe@24b1fc1d is not a known entity type.
at  org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4222)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
at com.portail.dao.DaoGroupe.ajouter(DaoGroupe.java:27)
at com.portail.managedBeans.GroupeBean.create(GroupeBean.java:58)
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 com.sun.el.parser.AstValue.invoke(AstValue.java:275)
... 41 more

这是Groupe类代码

                     @Entity
                 @NamedQuery(name = "Groupe.findAll", query = "SELECT g FROM Groupe g")
            public class Groupe implements Serializable {
           private static final long serialVersionUID = 1L;
                    @SequenceGenerator(name = "grp_seq", sequenceName = "SEQ_PK_GRP", initialValue = 1, allocationSize = 1)
                 @Id
                @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "grp_seq")
                @Column(name = "ID_GROUPE")
               private long idGroupe;
               @Column(length = 20, unique = true)
               private String nom;
              // bi-directional many-to-one association to Etudiant
             @OneToMany(mappedBy = "groupe", cascade = CascadeType.ALL)
              private List<Etudiant> etudiants;

// bi-directional many-to-many association to Professeur
@ManyToMany(mappedBy = "groupes", cascade = CascadeType.ALL)
private List<Professeur> professeurs;

public Groupe() {
}

public long getIdGroupe() {
    return this.idGroupe;
}

public void setIdGroupe(long idGroupe) {
    this.idGroupe = idGroupe;
}

public String getNom() {
    return this.nom;
}

public void setNom(String nom) {
    this.nom = nom;
}

public List<Etudiant> getEtudiants() {
    return this.etudiants;
}

public void setEtudiants(List<Etudiant> etudiants) {
    this.etudiants = etudiants;
}

public Etudiant addEtudiant(Etudiant etudiant) {
    getEtudiants().add(etudiant);
    etudiant.setGroupe(this);

    return etudiant;
}

public Etudiant removeEtudiant(Etudiant etudiant) {
    getEtudiants().remove(etudiant);
    etudiant.setGroupe(null);

    return etudiant;
}

public List<Professeur> getProfesseurs() {
    return this.professeurs;
}

public void setProfesseurs(List<Professeur> professeurs) {
    this.professeurs = professeurs;
}

我的RDBMS是Oracle10g xe

您的JSF应该包含以下内容

 <p:inputText id="newnom" value="#{groupeBean.nomValue}"
                    required="true" validatorMessage="Le nom est obligatoire">
                    <f:validateRequired />
                    <p:ajax event="blur" update="newnom_msg"></p:ajax>
                </p:inputText>
 <p:commandButton value="Enregistrer" update="growl"
                    actionListener="#{groupeBean.create}"
                    oncomplete="GroupeCree.hide()"></p:commandButton>

受管Bean应该如下。

@ManagedBean(name="groupeBean")

与方法

public String create(){
           gdao.ajouter(newGroupe);
            newGroupe=new Groupe();
            groupes.setWrappedData(gdao.selectAll());
                FacesMessage msg = new FacesMessage("Ajout effectué avec succés");
                FacesContext.getCurrentInstance().addMessage(null, msg); 
    return "list";
}

并拥有新的财产

String nomValue; (with its getter and setter).

将Sysouts放入create()方法以及getter和setter方法中,并在下面提供输出。

  1. 页面加载
  2. 在输入框中输入值后。
  3. 在您按下commandButton之后。

我已经解决了这个问题:对于任何有这样错误的人,您应该确保@ManagedBean和作用域注释是从javax.faces.bean.*导入的,否则mangedBen将无法从JSF中获取值。页。

您还需要确保输入的字段位于form元素内。 有关更多详细信息,请参阅此ManagedBean参数,并且Bean似乎不在范围内

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM