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

Servlets/JSP Java Discussion :

HashSet => toArray() => Problème


Sujet :

Servlets/JSP Java

  1. #1
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut HashSet => toArray() => Problème
    Bonjour à tous !
    Je rencontre un problème dans une jsp !
    Je voudrais convertir un Set en array afin de pouvoir affiché le 1er élement via [0]
    voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${article.images.toArray()[0].url}
    article.images revoie un Set

    et voilà ce que me revoie la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.jasper.JasperException: /WEB-INF/jsp/article-list.jsp(15,16) The function toArray must be used with a prefix when a default namespace is not specified
    alors je suppose qu'il faut que j'ajoute qqch mais quoi ?

    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    Avril 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Avril 2004
    Messages : 160
    Par défaut
    Citation Envoyé par garthos Voir le message
    et voilà ce que me revoie la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.jasper.JasperException: /WEB-INF/jsp/article-list.jsp(15,16) The function toArray must be used with a prefix when a default namespace is not specified
    alors je suppose qu'il faut que j'ajoute qqch mais quoi ?
    Je pense si tu code ta lige sur 2 lignes ça ira, d'abord tu récupére ton Set en faisant un cast explicite et aprés tu peux appliquer la methode toArray()

  3. #3
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Je ne comprends pas ce que tu veux dire ?
    j'utilise les Expressions Language, il me semblait que c'était possible de faire ça non ? et j'aimerais ne pas mettre de code scriplet dans mes jsp et n'avoir que des taglibs.

  4. #4
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    Avril 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Avril 2004
    Messages : 160
    Par défaut
    Citation Envoyé par garthos Voir le message
    Je ne comprends pas ce que tu veux dire ?
    j'utilise les Expressions Language, il me semblait que c'était possible de faire ça non ? et j'aimerais ne pas mettre de code scriplet dans mes jsp et n'avoir que des taglibs.
    Oui c'est vrai, il vaut mieux eviter de code java ds la page jsp...
    A ta place je cree une fct dans ton bean qui permet de te rortourner ta premiere image ou tte les images selon ton besoin, pour retourner la premiere image par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public TonBeanImage getFirstImage() {
    içi tu construit ton array et tu retounr la premiere image
    retourn premiereImage;
    }
    et de coup tu met ds ta page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${article.firstImageurl.url}
    Aprés ça depond de ta conception et de ce que tu fais avec les images...

  5. #5
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    ça va pas être possible je dirais en fait ....

    Car mon bean "article" c'est un bean de domaine lié a JPA/Hibernate et les images sont dans un HashSet que est dans article c'est une relation @OneToMany:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @OneToMany(mappedBy = "article")
    	public Set<ArticlePicture> getImages() {
    		return this.images;
    	}
    En fait j'ai bien penser à mettre des List à la place des Set mais il semble que les List pose problème lors de la génération du script DDL dans certain cas et notamment dans le cas des ManyToMany ou la clé composé sur la table d'association disparait => ( voir ce post )
    Et comme j'ai d'autre table d'image lié à d'autre objet mais que j'ai l'intention de tous les réunir dans une même table "Picture" je vais donc avoir besoin d'utilisé des JoinTable pour avoir par exemple "Article" -> "Picture" , "Ville" -> "Picture" , etc ....

    Une solution serait de créer une librairie de Tag et de créer un Tag qui me fait ça mais bon si il y a une autre solution de préférence propre, ça serait super bien !

    Merci d'avance

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Sauf à avoir des extensions EL propriétaires qui le supportent, EL ne permet pas d'appeler n'importe quelles méthodes, seuls les getter/setters sont accesibles.

    Par contre, Set étant une collection, il me semble que cette notation suffirait pour avoir le premier élément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${article.images[0].url}

  7. #7
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Justement non

    A priori les Set ne sont pas indexé donc pas moyen de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${article.images[0].url}
    C'est d'ailleurs la 1ere chose que j'ai essayé ! ça passe sur une List mais pas sur un Set,
    c'est d'ailleurs a mon avis pour la même raison que JSF n'aime pas trop les Set il me semble ...

    Et sinon tchize_ ? : tu ne sais pas par hazard pourquoi la génération DDL Hibernate/JPA n'ai pas la même quand j'utilise des List (ArrayList) à la place des Set (HashSet) ? (je pense notamment a cette histoire de clé qui disparait sur ma table d'association dans le cas @JoinTable sur un @ManyToMany par exemple ? car si je pouvais tout passer en List ça serait pas mal il me semble (surtout que j'ai lu qu'apparemment les List notamment les ArrayList sont plus performante que les HashSet)

    Merci d'avance.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    J'ai toujours utiliser des List (hibernate, pas JPA). Seulement, idéalement pour la choérence des List, il faut que les éléments présent dedans implémentent Comparable, sinon JPA/Hibernate aura besoin d'un colonne qui donne l'index dans la liste ce dont, en général, on en a rien à cirer

  9. #9
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Rien ne t'empêche d'appliquer la solution de bonano, il suffit d'annoter la méthode ajoutée avec @Transient pour cet attribut ne soit pas persisté.

    Ensuite par expérience, je préfère aussi les List aux Set. D'ailleurs avec Hibernate il existe aussi les "bags" ( qui sont sémantiquement non ordonnées, non indexées mais généralement implémentées avec des List.

    Pour la clef qui disparait sur la table d'association, si j'ai bien compris ton problème, c'est parce que avec des Set un élément ne peut être présent au plus qu'une seule fois, alors qu'avec des List il n'y a pas de limite (ce qui signifie en relationnel qu'on pourrait avoir deux lignes identiques dans la table d'association).
    Tu dois pouvoir t'en sortir en définissant une uniqueConstraints

  10. #10
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Haa ça m'interesse ! aurait tu un exemple avec uniqueConstraint stp ?
    Est ce que ça me permettre d'avoir la clé primaire sur la table de jointure lors de la génération DDL ?

    Par exemple qqch comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TABLE_DE_LIAISON (
       table1_id integer not null,
       table2_id integer not null,
       primary key (table1_id, table2_id)
    ) ENGINE=InnoDB;
    Merci d'avance

  11. #11
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    avec uniqueConstraints ça me génère qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     create table TABLE_DE_LIAISON(
            table1_id integer not null,
            table2_id integer not null,
            unique (table1_id, table2_id)
        ) ENGINE=InnoDB;
    donc avec unique à la place de primary key.

    C'est grave docteur ?

  12. #12
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Non c'est bien a ça que je pensais.

    Mais sur une table de deux colonnes non "nullables", que la contrainte formée par ces deux colonnes soit unique ou primaire, est ce que ça change grand chose pour toi ?

    (désolé pour la réponse tardive)

  13. #13
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Je dirais que non....

    Et sinon par hazard !J'ai un autre soucis donc je je te pose la question aussi !!
    je rencontre de grande difficulté pour mettre des critères sur un manyToMany ...
    Par exemple j'ai un objet Person qui contien une List d'objet Event
    Et quand je récupère l'objet Person via son Id, je voudrais bien avoir des critères sur la List d'objet Event ...
    J'avais poser la question sur ce post ou l'on m'avait aiguiller ...
    Mais après moult échec ... j'ai abandonné ... et contourner le problème ...
    Cependant j'aimerais réussir à faire ça car me permettrai d'avancer à grand pas sur JPA ...
    Peux tu jetter un coup d'oeil stp ? et si tu m'aider ça serait le bien venu !

    Merci d'avance !!

Discussions similaires

  1. Problème avec containsAll de HashSet
    Par javast dans le forum Général Java
    Réponses: 8
    Dernier message: 21/11/2011, 14h54
  2. Réponses: 0
    Dernier message: 11/02/2010, 17h49
  3. probléme avec HashSet
    Par chebmo1986 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/03/2009, 17h47
  4. Problème balise iterate avec la classe HashSet
    Par kokumbo dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/11/2007, 15h43
  5. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18

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