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 :

Count sur une propriété d'un bean entité


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut Count sur une propriété d'un bean entité
    Bonjour,

    Je dispose d'un entity bean "question" qui possède une propriété de type collection "interestedUsers". J'aimerais dans une page JSF affiche le nombre total d'utilisateurs intéressés par une question.

    J'ai ajouté une méthode InterstedUserCount qui renvoit un entier à mon entity bean, mais je n'arrive pas à y accéder car ce n'est pas une propriété. J'ai essayé d'en faire une propriété en la préfixant de get, mais c'est l'entity manager qui rale parce qu'il n'y a pas le setter qui va avec.

    Faut il rajouter une annotation sur la méthode ou simplement ma déclaration dans JSF qui n'est pas bonne (j'utilise #{question.InterestedUserCount()} ) ?.

    Merci de m'éclaire dans mes recherches, je débute bien sûr et c'est pas évident de trouver la documentation que l'on cherche....

  2. #2
    Membre confirmé
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Par défaut
    bonjour,

    pouquoi ne pas utiliser:

    List<beanentite> XX=sessionEJB.queryFindByXX();
    count = xx.size();

    je crois que ça est pls facile!

    bon courage

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Le truc, c'est que j'ai essayé de mettre cette propriété count dans mon bean entité (EJB3). Mais dans ce cas, c'est l'entity manager qui ne sait pas quoi faire de cette propriété étant donné qu'elle n'a pas de setter.

    Je me dis que je vais peut être devoir faire un bean spécifique avec une méthode pour juste avoir le count, mais c'est vraiment compliqué je trouve !

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    faut etre fou pour executer ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<beanentite> XX=sessionEJB.queryFindByXX();
    count = xx.size();
    tu parcours ta collection pour obtenir le size

    il vaut mieux faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public int count() {
            return Integer.valueOf(em.createQuery("select count(o) from NewEntity as o ").
                    getSingleResult().
                    toString());
        }

    et pour une requete avec un index de dep et un max count

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       public List<NewEntity> findByIndex(int index, int max) {
            return em.createQuery("select object(o) from NewEntity as o ORDER BY o.id").
                    setFirstResult(index).
                    setMaxResults(max).
                    getResultList();
        }

  5. #5
    Membre confirmé
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Par défaut
    c'est la plus facile,

    une fois reussi, on cherche sur l'optimisation. c'est presque tous les gens font ça, ils resoluent le probleme ensuite ils cherchent à optimiser

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut pas de jsf alors
    Donc si je comprends bien, il n'y a pas de composant JSF tout fait qui permette d'afficher le nombre d'objets contenus dans une collection.

    Il faut donc que je développe un méthode getCount sur mon bean entité qui me renvoie le nombre de composants liés.

  7. #7
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Je ne sais pas ce que tu utilises comme Provider de persistence pour JPA.
    Mais Hibernate te permets d'associé une formule SQL à une propriété.

    Tu pourrais donc associé le field counter à une méthode et n'avoir qu'un getter.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <property name="counter" 
              formula="( select count(distinct r.ID) 
                         from INTEREST r 
                         where r.ID_QUESTION = ID )">
    Ou en annotation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @org.hibernate.annotations.Formula("select count(distinct r.ID) 
                                        from INTEREST r 
                                        where r.ID_QUESTION = ID")
    public Long getInterestCount() {
       return counter;
    }
    Alex

  8. #8
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Citation Envoyé par dmetzler
    Donc si je comprends bien, il n'y a pas de composant JSF tout fait qui permette d'afficher le nombre d'objets contenus dans une collection.

    Il faut donc que je développe un méthode getCount sur mon bean entité qui me renvoie le nombre de composants liés.
    Cela n'a rien avoir avec JSF par contre! Je vois pas trop le magie que JSF pourrait-y faire d'ailleur.
    Alex

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Ok, j'aime bien l'annotation hibernate, je vais essayer.
    J'utilise Seam/EJB3 et Hibernate.


    En fait, je voyais JSF comme la couche de présentation, et je pensais qu'il avait quelque méthode pour extraire le nombre d'objets d'une collection. (Je viens du monde php/python et langages interprétés faut pas m'en vouloir)

  10. #10
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Et bien disons que j'ai du mal te comprendre (ou j'ai perdu le fil de la discussion).
    En JSTL il y a la fonction length:

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    ${fn:length(tempStr)}

    Mais pour ca il faut que tu soit dans un environnement Java 5, avec les spec Servlet 2.5, etc, etc...

    Le truc de la formula, ca te permets de connaitre la taille sans charger toute la Collection. Mais je me demande sur les proxy Hibernate, s'il ne charge que les ID si tu fais un call sur size()... Mais je suis pas sûr là.

    Alex

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Citation Envoyé par mbouzouita
    bonjour,

    pouquoi ne pas utiliser:

    List<beanentite> XX=sessionEJB.queryFindByXX();
    count = xx.size();

    je crois que ça est pls facile!

    bon courage
    t es fou, tu dois d abord charger la liste pour obtenir ensuite sa taille !

    si tu utilises EJB 3.0 je te conseille :

    dans ton managed bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<NewEntity> news = newsEntityFacade.findByIndex(index, rowByPage);
    dans ta facade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        public int count() {
            return Integer.valueOf(em.createQuery("select count(o) from NewEntity as o ").
                    getSingleResult().
                    toString());
        }
    note tu peux simplement ajouter des param a ton count ... avec .setParameter(index du param, "valeur")


    Si tu utilises Hibernate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        public int count() {
            return (Integer) session.createCriteria(NewEntity.class).setProjection(Projections.count("id").setDistinct()).uniqueResult();    
        }

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Citation Envoyé par a.snaps
    Je ne sais pas ce que tu utilises comme Provider de persistence pour JPA.
    Mais Hibernate te permets d'associé une formule SQL à une propriété.

    Tu pourrais donc associé le field counter à une méthode et n'avoir qu'un getter.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <property name="counter" 
              formula="( select count(distinct r.ID) 
                         from INTEREST r 
                         where r.ID_QUESTION = ID )">
    Ou en annotation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @org.hibernate.annotations.Formula("select count(distinct r.ID) 
                                        from INTEREST r 
                                        where r.ID_QUESTION = ID")
    public Long getInterestCount() {
       return counter;
    }
    Alex
    Pas mal le formula + property je connaissais pas

Discussions similaires

  1. Création tag avec test sur une proprièté d'un bean
    Par Didine981 dans le forum Struts 1
    Réponses: 1
    Dernier message: 04/06/2009, 22h08
  2. Réponses: 4
    Dernier message: 15/02/2007, 10h06
  3. Réponses: 2
    Dernier message: 06/09/2006, 23h20
  4. probleme sur count sur une base differente
    Par webisa dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/07/2005, 05h32
  5. un count sur une jointure et ca ne fonctionne pas
    Par elbronziero dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/10/2004, 11h23

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