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 :

[Binding manuel sur List] Comment faire une iteration de binding


Sujet :

JSF Java

  1. #1
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut [Binding manuel sur List] Comment faire une iteration de binding
    Bon, je savais pas quoi mettre comme titre

    J'ai la posibilite de choisir des langues ( représenté sous forme d'une chaine de caractère ).

    Quand on langue est selectionnée, il doit être possible de choisir une personne de référence pour cette langue. La liste des personnes étant différente pour chaque langue.

    Il n'est donc pas possible de faire un dataTable, avec un selectOneMenu, car il faudrait faire un appel du genre getListePersonne(String langue), or les EL ne le permette pas en JSF standard.

    J'ai donc pensé à binde un panelGrid à mon composant et de le remplir manuellement, en construisant comme ceci :

    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
    //return this.panelLanguesEtPersonnes;
    		HtmlPanelGrid panelGrid = new HtmlPanelGrid();
    		
    		for(LangueProcedure langue : this.listeLangueProcedure){
    			HtmlOutputText outputText = new HtmlOutputText();
    			outputText.setValue("Personne de contact pour " + langue.getLangue());
    			panelGrid.getChildren().add(outputText);
    			
    			HtmlSelectOneMenu menu = new HtmlSelectOneMenu();
    			menu.setValueBinding("value",  THAT_S_THE_QUESTION);
                
    			
    			for(Personne person : personneManager.loadByLanguage(langue.getLangue())){
    				menu.getChildren().add(new SelectItem(person.getNom(), person.getNom()));
    			}
                panelGrid.getChild().add(menu);
    		}
    Que dois-je mettre à la place de THAT_S_THE_QUESTION, pour le lié au bon element de la liste?

    Quand on utilise les dataTable, on doit specifié une variable qui pointe sur la ligne courante, et on lie les composants via cette variable.

    Comment faire ici ?

    Merci d'avance de votre aide
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    Citation Envoyé par Hikage Voir le message
    Bon, je savais pas quoi mettre comme titre
    J'ai la posibilite de choisir des langues ( représenté sous forme d'une chaine de caractère ).

    Quand on langue est selectionnée, il doit être possible de choisir une personne de référence pour cette langue. La liste des personnes étant différente pour chaque langue.

    Il n'est donc pas possible de faire un dataTable, avec un selectOneMenu, car il faudrait faire un appel du genre getListePersonne(String langue), or les EL ne le permette pas en JSF standard.
    Je ne suis pas sur d'avoir compris la problèmatique, veux tu re-expliquer s'il te plaît ?
    En fait, je ne suis pas trop emballé par l'approche que tu as choisi, et je crois que tu peux t'en sortir en soft.

  3. #3
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Bon j'ai ajouté un screenshot de ce que j'ai actuellement.

    Etape 1 : on selectionne une liste de langue
    Etape 2 : on appuie sur le bouton qui va recharger la liste des langues choisie et "créer" les selectOneMenu des personnes de références.

    Etape 3 : Le page contient les selectOneMenu, contenant de personnes de références, différentes selon la langue à laquelle elles sont liées.
    ( Les traducteurs anglais ne sont pas les meme que les traducteurs allemands )

    Le premier problème que j'ai c'est que lors de l'envoi du formulaire, la liste des LangueProcedure ( classe qui lié un code langue à un traducteur ) est bien créé, mais le HtmlPanelGrid étant déjà crée, on ne passe plus par la méthode de binding du PanelGrid, et donc mes selectOneMenu ne sont pas créé. Pour les "voir" je dois réafficher la page par un HTTP get ( en gros, me mettre dans la barre d'adresse et tapé enter ).

    Est-il possible de resetté l'arbre des composants pour qu'il le reconstruise ?

    le deuxième probleme, c'est que je ne sais pas comment lié mes selectOneMenu, vu qu'il sont lié à un element de la liste de ProcedureLangue

    Il faudrait pouvoir faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menu.setValueBinding("value", FacesContext.getCurrentInstance().getApplication().createValueBinding("#{selectionLanguesProcedureMB.listeLangueProcedure[index]}"));

    Mais je ne pense pas que cela soit possible.
    Images attachées Images attachées  
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  4. #4
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Bon, pour le premier problème ( non affichage du panelModifie ) j'ai trouvé mon erreur.

    Je pensais que la méthode du "binding" étaient appelée à chaque fois que la vue était affichée, mais ce n'est pas le cas.

    J'ai donc déplacé la génération des selectOneMenu dans l'actionListener du bouton, et ca marche.

    Reste le problème de binding.
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  5. #5
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Oki, c'est plus clair maintenant, merci

    Comme dit plus haut, je suis pas chaud à passer par la méthode Hard (création de composants programmatiquement, etc.)

    A priori, je vois deux solutions:
    Passer par un Map (on en a déjà parlé). Le map permet de simuler une fonction avec un paramètre dans l'EL, chose pas possible normalement.
    Introduire un niveau d'indirection: au lieu de travailler sur toutes les langues à la fois, tu fais en sorte que l'utilisateur séletionne une langue, et tu affiches un selectOneMenu en conséquence.

  6. #6
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    La deuxième proposition n'est pas envisageable, refusé par le client.
    C'est une migration d'une application existante, et veux que cela reste dans le meme style.

    Par contre, pour le système de Map, est-ce qu'il est possible de passer comme paramètre le résultat d'une EL ?

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{monBean.getListePersonne[maRow.langue]}
    Ou bien evidemment, maRow est la valeur de l'attribut var d'un dataTable ?



    PS : Pourquoi tu es contre la méthode hard? A quoi servirait le Binding alors? :]
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Oui, il est possible de faire ce qu'on veut (utiliser une EL comme clé d'une Map, etc.

    Bah j'aime pas la méthode Hard car trop bas niveau, trop fragile, délicat à créer une hiérarchie de composants correctement, etc.

  8. #8
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Ok

    Bon je vais tester cela alors.
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  9. #9
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Pour ceux qui trouvent que les expressions EL sont trop limitées, il y a EL Functors. Cela autorise par exemple l'appel de méthode d'un bean Java avec des paramètres...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  10. #10
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Ca marche !

    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

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

Discussions similaires

  1. comment faire une liste de tache sur labview ?
    Par ahmadou dans le forum LabVIEW
    Réponses: 1
    Dernier message: 24/04/2012, 12h37
  2. Réponses: 0
    Dernier message: 15/12/2009, 16h38
  3. Comment faire une liste d'évènements ?
    Par WebPac dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2006, 10h36
  4. Comment faire une liste d'image de choix ?
    Par poussinphp dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/10/2005, 00h34
  5. Réponses: 2
    Dernier message: 03/05/2004, 12h13

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