объект, возвращенный со страницы jsf, сохраняется с нулевым значением

В моем приложении, когда я нажимаю кнопку «Добавить» и после того, как я ввожу значения и пытаюсь сохранить объект в базе данных, он сохраняется как нулевое значение без сообщения об ошибке в файле журнала. Первичный ключ генерируется из последовательности, которую я просто введите значение имени. Вот код страницы 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>

и это код управляемого компонента

                      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, так как я новичок, я использую класс дао, и вот его код

                    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();

              }

я не могу понять, что не так, нет сообщения об ошибке, и я не знаю, в чем ошибка, это трассировка стека после того, как Адарш сказал мне сделать

                         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;
}

Моя СУБД — Oracle10g xe.


person MeknessiHamida    schedule 01.01.2014    source источник
comment
Вы пытались напечатать значение в геттерах и сеттерах?   -  person Adarsh    schedule 02.01.2014
comment
В вашем компоненте у вас будет метод getGroupe, попробуйте напечатать значение одного из свойств класса Groupe.   -  person Adarsh    schedule 02.01.2014
comment
Просто напишите system.out.println в своем методе и напечатайте значение Groupe.nom. Когда вы выполните свою страницу, она напечатает правильное значение.   -  person Adarsh    schedule 02.01.2014
comment
Groupe.nom возвращает ноль   -  person MeknessiHamida    schedule 02.01.2014
comment
Как в getNewGroupe, так и в setNewGroupe?   -  person Adarsh    schedule 02.01.2014
comment
да оба они возвращают ноль   -  person MeknessiHamida    schedule 02.01.2014
comment
Попробуйте определить новый атрибут String в компоненте, используйте эту строку для хранения значения, которое вы вводите в inputText. Затем в вашем методе создания, который вызывается при нажатии кнопки команды, назначьте значение новой строки для newGroupe.nom, а затем попробуйте сохранить его. Кроме того, проверьте значение в геттере и сеттере новой используемой строки.   -  person Adarsh    schedule 02.01.2014
comment
я пробовал так, и теперь я получаю это исключение Avertissement: java.lang.IllegalArgumentException: Object: com.portail.entities.Groupe@50bd45e1 is not a known entity type. javax.el.ELException: java.lang.IllegalArgumentException: Object: com.portail.entities.Groupe@50bd45e1 is not a known entity type.   -  person MeknessiHamida    schedule 02.01.2014
comment
Что такое EL, который вы использовали?   -  person Adarsh    schedule 02.01.2014
comment
я использовал этот EL #{groupeBean.nom} после создания nom и его геттеров и сеттеров в groupeBean   -  person MeknessiHamida    schedule 02.01.2014
comment
Вы установили значение nom для соответствующего объекта при нажатии кнопки?   -  person Adarsh    schedule 02.01.2014
comment
да public String create() { newGroupe.setNom(nom); gdao.ajouter(newGroupe); groupes.setWrappedData(gdao.selectAll()); newGroupe=new Groupe(); FacesMessage msg = new FacesMessage("Ajout effectué avec succés"); FacesContext.getCurrentInstance().addMessage(null, msg); return "list"; }   -  person MeknessiHamida    schedule 02.01.2014
comment
Сопоставили ли вы класс GroupE с правильной таблицей и использовали ли все правильные аннотации?   -  person Adarsh    schedule 02.01.2014
comment
да, я так думаю, и это часть моей организации Groupe @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;   -  person MeknessiHamida    schedule 02.01.2014
comment
Опубликуйте часть кода, которая вызывает исключение. Трассировка стека должна содержать эту информацию.   -  person Adarsh    schedule 02.01.2014
comment
Сегодня исключение исчезло, но атрибут Nom, который я создал для назначения экземпляру Groupe, возвращает значение null.   -  person MeknessiHamida    schedule 03.01.2014
comment
В методе установки он должен печатать значение, которое вы вводите при отправке страницы.   -  person Adarsh    schedule 03.01.2014
comment
да отправленное значение является нулевой строкой   -  person MeknessiHamida    schedule 03.01.2014
comment
Тогда что-то не так с кодом.   -  person Adarsh    schedule 03.01.2014
comment
я знаю, что что-то не так или я сделал что-то не так, но я не знаю, где я уже размещал код выше   -  person MeknessiHamida    schedule 03.01.2014


Ответы (2)


Ваш 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>

Управляемый Бин должен быть следующим.

@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(), а также в геттер и сеттер и предоставьте мне вывод после следующего;

  1. загрузка страницы
  2. после ввода значения в поле ввода.
  3. после того, как вы нажмете commandButton.
person Adarsh    schedule 03.01.2014
comment
Я сделал, как вы сказали, и опубликовал измененный код в вопросе, но примечательно то, что он печатает только sysouts геттера nomValue и метода create, но не печатает sysout геттера или установщика newGroupe, а также после я ввожу значение в диалоговое окно, в котором мои данные содержат значение Groupe на странице jsf, не обновляется, и FaceMessage не появляется - person MeknessiHamida; 04.01.2014
comment
Но все значения нулевые? даже после того, как вы введете значение на странице и отправите его? - person Adarsh; 04.01.2014
comment
Опубликуйте свой класс Groupe тоже - person Adarsh; 04.01.2014
comment
я исправил исключение, но значения по-прежнему равны нулю, поскольку стек file:/C:/glassfish4.1/glassfish/domains/domain1/eclipseApps/Portail/WEB-INF/classes/_Portail login successful 2014-01-04T00:25:21.703+0100|Infos: NEWgrp null 2014-01-04T00:25:31.518+0100|Infos: creategnom null 2014-01-04T00:25:38.546+0100|Infos: NEWgrp null - person MeknessiHamida; 04.01.2014

Я исправил проблему: для тех, у кого возникла такая ошибка, вы должны убедиться, что @ManagedBean и аннотация области импортированы из javax.faces.bean.*, иначе mangedBen не сможет получить значения со страницы JSF.

Вам также необходимо убедиться, что поля ввода находятся внутри элемента формы. Дополнительные сведения см. в этом параметрах ManagedBean. не принято, и Бин, по-видимому, не входит в сферу действия

person MeknessiHamida    schedule 18.01.2014