IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

datatable vide et recherche conditionné


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut datatable vide et recherche conditionné
    Salut ,

    Bonjour , je développe une entreprise application JEE (avec l'EJB) avec netbeans 6.7 ,JSF et Wampserver , representant une interface web aux clients qui leurs permettent de s'inscrire en fournissant certains données au premier temps et de login et modifier leurs comptes ultérieurement .

    Je manipule deux table dans ma base de données : table 'client' et table 'interest' .
    Ma table client contient 3 colonnes : id , keyword et clientId .

    Dans une de mes pages JSP , je veux afficher des lignes de ma table interest
    suivant le critére " clientId= x " par exemple . Or j'utilise les EJB .
    Il y' 5 methodes prédéfinies dans ma page 'InterestFacadeLocal' , deux parmi ces 5 aident pour la recherche qui sont : find et findAll .
    La methode findAll ,je pense qu'elle ne permet pas d'effecture une recherche suivant un critére , elle rend toute les lignes de la table .

    J'ai essayé donc avec la methode find(clientId) de la maniére suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String lists()
    {    clientId=x;
         System.out.println("--------1-------");
         System.out.println("---------------"+clientId);
        Interest i =inf.find(clientId);
        System.out.println("--------2-------");
        System.out.println(i);
         System.out.println("--------3-------");
        return "lists";
    }

    ca a affiché dans l'output de glassfish :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    --------1-------
    ----------------x
    --------2-------
    null
    --------3-------
    Pour l'affichage , j'ai utilisé un datatable , mais aprés le Run , je l'obtient vide .

    La page JSP est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <f:view>
    <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                <title>List of interests</title>
            </head>
            <body>
                <h1><h:outputText value="List of Interests"/></h1>
     
            <h:form id="interest">
     
                <h:form>
                    <h1><h:outputText value="Interests List"/></h1>
                    <h:dataTable value="#{metier.i}" var="item">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="InterestId"/>
                            </f:facet>
                            <h:outputText value="#{item.interestId}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Keyword"/>
                            </f:facet>
                            <h:outputText value="#{item.keyword}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Clogin"/>
                            </f:facet>
                            <h:outputText value="#{item.clogin}"/>
                        </h:column>
                    </h:dataTable>
                </h:form>
     
     
            </h:form>
     
            </body>
     
        </html>
        </f:view>



    Je sais pas ou est le probléme , peut etre l'utilisation de la methode find(clientId) n'est pas le bon choix .

    Quelqu'un peut me corriger cette méthode .
    Y'a t'il une autre méthode pour afficher ce choix conditionné ?

    Merci bien .

  2. #2
    Membre confirmé Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Par défaut
    Est ce que tu peux poster l'implementation de la methode find ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Salut ,

    dans la page InterestFacade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @Stateless
    public class InterestFacade implements InterestFacadeLocal {
        @PersistenceContext
        private EntityManager em;
     
        public void create(Interest interest) {
            em.persist(interest);
        }
     
        public void edit(Interest interest) {
            em.merge(interest);
        }
     
        public void remove(Interest interest) {
            em.remove(em.merge(interest));
        }
     
        public Interest find(Object id) {
            return em.find(Interest.class, id);
        }
     
        public List<Interest> findAll() {
            return em.createQuery("select object(o) from Interest as o").getResultList();
        }
    Dans la page InterestFacedeLocal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public interface InterestFacadeLocal {
     
        void create(Interest interest);
     
        void edit(Interest interest);
     
        void remove(Interest interest);
     
        Interest find(Object id);
     
        List<Interest> findAll();
     
    }

  4. #4
    Membre confirmé Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Par défaut
    Vous pouvez juste ajouter une autre methode a ton EJB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public List<Interest> findByClientId(String clientId /* tu met le type de la variable cleintId , pas nécessairement String*/) { 
            return em.createQuery("select o from Interest  o where o.clientId= : clientId").setParameter("clientId", clientId).getResultList();
        }

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Je l'ajoute dans mon managedbean 'metier' qui contient la methode 'lists' ou dans 'InterestFacade' ?

    Merci

  6. #6
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Je l'ai ajouté dans mon managedbean metier juste avant la methode 'lists' , comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public List<Interest> findByClientId (String clientId  {
            return em.createQuery("select o from Interest  o where o.clientId = : clientId ").setParameter("clientId ", clientId ).getResultList();
        }
     
     public String lists()
    {    clientId =x;
         System.out.println("--------1-------");
        System.out.println("---------------"+clientId );
         intlist =findByClientId (clientId );
        System.out.println("--------2-------");
     
         getIntlist ();
         System.out.println("--------3-------");
        return "lists";
    }
    ou intlist est une une liste de interest .


    Maintenant au moment du run , lorsque j'appelle la methode 'lists' en cliquant sur un bouton 'interests' j'obtient l'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    type Rapport d'exception
     
    Message
     
    DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
     
    Exception
     
    javax.servlet.ServletException: #{metier.lists}: java.lang.NullPointerException
     
    Cause racine
     
    javax.faces.FacesException: #{metier.lists}: java.lang.NullPointerException
     
    Cause racine
     
    javax.faces.el.EvaluationException: java.lang.NullPointerException
     
    Cause racine
     
    java.lang.NullPointerException
     
    note Les suivis de pile complets de l'exception et de ses causes principales sont disponibles dans les journaux Sun GlassFish Enterprise Server v2.1.

    L'output de glassfisch est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    --------1-------
    ---------------x
    java.lang.NullPointerException
    javax.faces.el.EvaluationException: java.lang.NullPointerException
            at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
            at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
            at javax.faces.component.UICommand.broadcast(UICommand.java:383)
            at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
            at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
            at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
            at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
            at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
            at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)

  7. #7
    Membre confirmé Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Par défaut
    Tu dois ajouter cette methode dans ton bean Facade InterestFacade

    puis tu change cette methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String lists()
    {    clientId=x;
        Interest i =inf.findByClientId (clientId);
        System.out.println(i);
        return "lists";
    }

  8. #8
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Je l'ai mis dans 'interestFacade'
    ca rend un erreur car dans la definition de la methode ,on attend un résultat de type liste ,et si on met i=inf.findby , i est de type interest .

    sinon ,si on laisse intlist=inf.findBy... ca affiche l'erreur que j'ai mentionné .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    type Rapport d'exception
     
    Message
     
    DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
     
    Exception
     
    javax.servlet.ServletException: #{metier.lists}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.FacesException: #{metier.lists}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.el.EvaluationException: javax.ejb.EJBException
     
    Cause racine
     
    javax.ejb.EJBException
     
    Cause racine
     
    java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
     
    Cause racine
     
    Exception [TOPLINK-8026] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EJBQLException
    Exception Description: Syntax error parsing the query [select o from Interest  o where o.clientId= : clientId], line 1, column 44: unexpected char [ ].
     
    note Les suivis de pile complets de l'exception et de ses causes principales sont disponibles dans les journaux Sun GlassFish Enterprise Server v2.1.

  9. #9
    Membre confirmé Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Par défaut
    En fait ça doit être ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String lists()
    {    clientId=x;
        List<Interest> i =inf.findByClientId (clientId);
        System.out.println(i);
        return "lists";
    }

  10. #10
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Salut ,

    i est déja définie de type interest . J'ai fait comme tu m'a indiqué .

    Dans la page 'interestslist.jsp' (page d'affichage de la list) j'ai mis ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:dataTable value="#{metier.i}" var="item">
                        <h:column>
                                   .
                                   .
                                   .
    ca m'a affiché juste le commandLink Delete (devant une ligne) (une seule ligne et un seul commandLink dans cette ligne) mais ca n'a pas affiché le contenu des trois champ de la table interest .

    L'image ci-joint explique mieux .

    Je sais pas peut etre c'est parceque i est de type interest ?
    Images attachées Images attachées  

  11. #11
    Membre confirmé Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Par défaut
    STP de nous montrer le code de ton dataTable !

  12. #12
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    c ca :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <f:view>
    <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                <title>List of interests</title>
            </head>
            <body>
                <h1><h:outputText value="List of Interests"/></h1>
     
            <h:form id="interest">
     
     
                    <h1><h:outputText value="Interests List"/></h1>
                    <h:dataTable value="#{metier.intlist}" var="item">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="InterestId"/>
                            </f:facet>
                            <h:outputText value="#{item.interestId}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Keyword"/>
                            </f:facet>
                            <h:outputText value="#{item.keyword}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="ClientId"/>
                            </f:facet>
                            <h:outputText value="#{item.clientId}"/>
                        </h:column>
                        <h:column>
            <f:facet name="header"></f:facet>
          <h:commandLink id="removelist"
                               value="Delete "
                               action="#{metier.removelist}">
     
    <f:param name="keywordd" value="#{item.keyword}"/>
     
               </h:commandLink>
         <h:messages />
        </h:column>
                    </h:dataTable>
     
     
     
            </h:form>
     
            </body>
     
    </html>
        </f:view>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Session terminée DataTable vidée
    Par electrolol dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/04/2008, 09h17
  2. Recherche conditionnée dans une table
    Par doolar dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/03/2008, 21h17
  3. Comment gerer les dataTable vide ?
    Par perezoso dans le forum JSF
    Réponses: 6
    Dernier message: 05/02/2007, 12h56
  4. [LDAP] Résultat vide après recherche sur Active Directory
    Par crashyear dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/10/2006, 17h40
  5. [Vb.net 2005]_Routine Sub donnant DataTable vide ?
    Par Gdal dans le forum Accès aux données
    Réponses: 1
    Dernier message: 07/10/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo