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 :

duplication id dans un foreach


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut duplication id dans un foreach
    Bonjour tout le monde,
    J'ai un petit problème d'id sur mes textarea. Actuellement je parcoure une liste à l'aide de foreach, dans celui-ci je créer un outputTextarea, lors du chargement de la page il m'indique le message suivant:
    duplicate Id for a component redaction:j_id_jsp_814148560_140
    Rédaction est le nom de ma JSP.

    Afin de simplifier les choses, voici le bout de code concerné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <core2:forEach items="#{BeanRedaction.listCategorie}" var="categorie"  varStatus="statutCategorie">
    	<rich:panelBarItem label="#{categorie.nomCategorie}">
    		<rich:dataTable value="#{categorie.listCodeAffectation}" var="code">
    		<rich:column>
    			<html:outputText value="#{code.codeAffectation}" />
    		</rich:column>
    		</rich:dataTable>
    		<html:inputTextarea />
    	</rich:panelBarItem>
    </core2:forEach>
    alors j'ai tester avec un binding et vu qu'on ne peut pas générer d'id dynamiquement, je vois pas trop comment faire, quelqu'un à une idée?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    pour quel composant tu as l'erreur?
    tu n'utlises pas de binding quelque part?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    l'erreur disparait quand j'enlève mon <html:inputTextarea />. Donc je pense qu'il génère le même identifiant pour chaque <html:inputTextarea /> créé dans ma boucle.

    J'ai viré mon binding pour simplifier le problème car je ne sais pas si c'est la solution et je ne suis pas fan de définir des composants graphique dans mes beans.

    Voici se que j'avais fait avec le binding:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <core2:forEach items="#{BeanRedaction.listCategorie}" var="categorie"  varStatus="statutCategorie">
    <rich:panelBarItem label="#{categorie.nomCategorie}">
    	<rich:dataTable value="#{categorie.listCodeAffectation}" var="code">
    	<rich:column>
    		<html:outputText value="#{code.codeAffectation}" />
    	</rich:column>
    	</rich:dataTable>
    	<html:inputTextarea binding="#{BeanRedaction.texteSaisie[categorie.id]}" />
    </rich:panelBarItem>
    </core2:forEach>
    et dans le bean ca donne ca (je précise que j'ai pas l'habitude d'utiliser des binding donc c'est peut être faux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    this.texteSaisie = new HashMap<Long, HtmlOutputText>();
    for (Iterator<Categorie> iterator = this.listCategorie.iterator(); iterator.hasNext();)
    {
    	Categorie categorie = (Categorie) iterator.next();
    	HtmlOutputText texte = new HtmlOutputText();
    	texte.setId("_"+categorie.getId().toString());
    	texteSaisie.put(categorie.getId().longValue(), texte);
    }

  4. #4
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    Si l'id peut prendre des EL je te conseille de créer un getter dans ton bean du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private Integer id = 1;
    public String getId() {
     return String.ValueOf(id+1);
    }
    et pour la jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <core2:forEach items="#{BeanRedaction.listCategorie}" var="categorie"  varStatus="statutCategorie">
    	<rich:panelBarItem label="#{categorie.nomCategorie}">
    		<rich:dataTable value="#{categorie.listCodeAffectation}" var="code">
    		<rich:column>
    			<html:outputText value="#{code.codeAffectation}" />
    		</rich:column>
    		</rich:dataTable>
    		<html:inputTextarea id="#{BeanRedaction.id}" />
    	</rich:panelBarItem>
    </core2:forEach>
    normalement à chaque passage du foreach la méthode sera appelée.

    A testé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    Merci pour cette proposition malheureusement, j'ai déjà testé un truc similaire et id ne peut être une valeur dynamique. Je n'ai pas le droit de mettre quelque chose du type:

    C'est d'ailleurs pour cela que j'ai essayé de me tourner vers le binding qui semble être une méthode pour définir les paramètres d'un tag.

  6. #6
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    donne un id à tout les composant sans exception pour commencer et regarder si les id générer par le for-each sont différente !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    Le problème vient bien du foreach et du textarea. En effet a chaque fois que ma boucle créer un nouveau textarea, il lui donne le même identifiant.

    Je vois pas comment le resoudre

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    Je viens de tester en virant le foreach et le probleme d'id a disparu. Cependant le résultat ne correspond pas a se que je veux. Si tu connais une méthode autre que le foreach, dataTable et dataList pour parcourir une boucle je suis preneur.

  9. #9
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    Si tu peut utile tomahawk qui permet les EL dans l'id de l'inputTextArea

    cf ici

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    tu es sur que ca accepte car il me dit que l'argument est illégale?

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par iviath Voir le message
    Je viens de tester en virant le foreach et le probleme d'id a disparu. Cependant le résultat ne correspond pas a se que je veux. Si tu connais une méthode autre que le foreach, dataTable et dataList pour parcourir une boucle je suis preneur.
    ui:repeat, a4j:repeat.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    ui:repeat, a4j:repeat.
    Merci je teste, avec ca
    Si tu peut utile tomahawk qui permet les EL dans l'id de l'inputTextArea
    cf ici
    effectivement ca semble marcher, mais j'obtiens n'import quoi à l'affichage, je creuse pour voir si j'ai pas fais une faute bete.

    Puis, je vais creuser la méthode de Sniper. Au fait ui c'est quel tagLib?

Discussions similaires

  1. [Tableaux] Message d'erreur dans un foreach
    Par maysa dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2007, 11h45
  2. [JSTL] Checkboxes dans un foreach
    Par BadIsGood dans le forum Taglibs
    Réponses: 2
    Dernier message: 29/06/2007, 18h58
  3. [C#]utilisation de variables contenu dans un foreach
    Par beufreecasse dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/11/2006, 20h42
  4. [C#] Problème duplication intempestive dans treeview
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/06/2006, 10h23
  5. Problème de variable dans un foreach
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/05/2006, 16h57

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