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 :

Generer une liste et Selectionner une valeur


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut Generer une liste et Selectionner une valeur
    Bonjour,

    J'aimerais réaliser une aide a la saisie en JSF mais je ne sais pas vraiment comment la faire.

    Imaginons une page jsf avec un formulaire lié a un backing bean "Personne" qui ressemblerais a peu pres a ca :
    ----------------------------------------
    Nom: [ saisie nom ]
    Prenom: [ saisie prenom ]
    Ville: [ saisie ville ] >bouton recherche<
    [ liste ville ]

    >bouton valider form<
    ----------------------------------------

    Pour le nom et prenom aucun souci, parcontre pour la ville j'aimerais taper quelques lettres puis cliquer sur le bouton recherche qui remplie la "liste ville" en consequence. Là on choisit une ville dans la liste qui soit remplie le chp "[saisie ville]" soit remplie le backing bean directement, sachant que l'important est de recupéré l'id de la ville.
    Le top serait que la liste de ville générée soit invisible avant tout click sur le bouton recherche.

    Alors voila, si quelqu'un à déjà fait ce genre de choses ou a une idée je suis preneur.

    Merci.

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2006
    Messages : 74
    Par défaut
    ca doit pouvoir etre realisable en combinant avec Ajax, j'avoue que je n'en ai pas utilisé beaucoup avec des jsf, mais je pense que c'est possible

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    Ajax n'est pas obligatoire, la page peut se recharger pour générer la liste ce n'est pas grave.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    tu lie ta liste à un backing bean (backing bean=composant graphique HtmlSelectOneMenu) pour pouvoir travailler dessus de façon programmatique, ensuite quand tu clique sur ton bouton recherche tu va dans un action listener ou tu récupère la valeur du champ Ville, et en fonction tu réadapte ta ville.

    C'est les grandes lignes, après ca dépend de ton niveau, pour les explications.

    Le mieux c'est de donner des bouts de code au fure et à mesure.

    Ton bouton recherche doit avoir immediate="true" onClick="submit();"

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    Je vois pas vraiment l'interet d'un actionListener ici. un action normal marchera aussi bien (en faites j'ai jamais vu d'interet à actionListener à part celui de recuperer le composant qui à fait l'action).

    Seul le contenu de ta liste change. donc la liste du <f:selectItems>. A priori il suffit juste de modifier cette liste.

    La solution d'Alec6 est bonne aussi. Mais un peu lourde à mettre en place si le but c'est juste une modification des valeurs de la liste

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    C'est juste que je fais des trucs qui marchent; mais je maitrise pas encore les subtilités de JSF

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    Bon alors j'ai tenté une solution en me basant sur les indications de Alec6 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <h:outputLabel for="ville" value="Ville :"/>
    <h:inputText id="ville" value="#{personneCtr.personne.ville.nom}"/>
    <h:commandButton value="Rechercher" 
    				 actionListener="#{referentielCtr.findListVille}"
    				 immediate="true"/>
     
    <h:selectOneMenu id="id_ville" value="#{personneCtr.model.datas.idVille}">
    	<f:selectItems value="#{personneCtr.listVilleFound}" />
    </h:selectOneMenu>         			
    <h:message for="id_ville"/>
    Alors l'action est bien lancé mais la liste ne se met pas a jour, elle reste vide.
    Je continu mes tentatives...

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Tu utilise les managed bean, mais je crois qu'il faut faire des backing bean, (pas certain). C'est un problème du coté du cycle de vie de la requete.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    C'est pas la même chose les backingBean et les managedBean ?

    J'ai eu plus de resultat en enlevant l'attribut "immediat", parcontre du coup il essaye de valider toutes les valeur du formulaire et il n'aime pas que idVille soit null.

    Avec un actionListener est ce qu'il y amoyen de recuperer la valeur d'un champ par son id ?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Pour obtenir une pseudo réactivité t es obligé de dev un composant ajax like

  11. #11
    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
    pourquoi ne pas creer une methode dans la saissionbean:
    et dans cette session tu fais une requette parametré select * from xxxxx where like ?1 quelle va retourner une liste

    ensuite tu fais l'appel de cette methode dans l'action

    je crois que ça va marcher!

    j'ai vais le faire car j'ai le meme chose que vous

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    Pour obtenir une pseudo réactivité t es obligé de dev un composant ajax like
    On pourrait aussi charger toutes les villes dans un tableau javascript (des composants tomahawk permette de faire cela ce qui évite le dev spécifique d'un composant) et ensuite gerer le tout en javascript.

    C'est clairement moins propre qu'un composant ajax like mais plus facile à developper.

  13. #13
    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
    Autre possibilité:

    1. Tu laisses la personne entrer ces coordonnées.
    2. Elle entre les premières lettres de sa ville;
    3. clicque sur un bouton checher (immediate="true") qui lance la recherche
    4. La même page est affichée, mais avec une liste contenant le choix des villes trouvées...
    5. Elle envoi le formulaire: conversion, validation, ...


    Alex.

  14. #14
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    ton button recherche doit avoir l'attribut immediate pour justement éviter la validation de tous les champs du formulaire; en faite ca escamote l'étape de validation.

    Lorsque tu clique sur ton bouton tu arrive dans la méthode chargée du management de l'évènement.

    Dans cette méthode tu récupères la valeur du champ ville. Tu peux récupèrer le textField avec son Id (FacesContext.getInstance().getViewRoot().FindComponen(monID);

    Lorsque tu as la valeur (c'est la submittedValue si je ne me trompe), tu recrée ta liste; c'est la qu'intervient les backing bean.
    Un managed bean c'est un pojo; ca contient des données métier (couche données), tandis que les backing bean, c'est techniquement comme les managed bean sauf qu'on parle de bean IHM (couche présentation).

    Donc il faut que tu garde la référence de la liste dans ton code (c'est le fameux binding), et que tu la recompose dans ton code JAVA.

    C'est pas évident à expliquer.

  15. #15
    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 Alec6
    C'est pas évident à expliquer.
    Certes... Et pourtant tu t'en est carrément bien sorti!

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    Merci pour ces explications!

    Je ne maitrise pas encore les vues et les composants JSF, ca se melange un peu. Pour mon problème aprés quelques tests et autres bidouille j'ai réussi faire ce que je voulais, mais sans le parametre immediate, quand je l'active il se plante (de facon transparente, aucun message d'erreur...) et abort l'action de recherche de la liste et reviens a la page.
    Ma methode recherche s'arrete au moment ou je veux recuperer la valeur de mon champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FacesContext facesContext = FacesContext.getCurrentInstance();
    UIInput comp = (UIInput)facesContext.getViewRoot().findComponent("ville");
    String villeParam = (String)comp.getValue(); << ICI
    J'ai essayé avec un type UIOutput et UIInput paske j'ai trouvé les deux cas sur le net.

    Je crois que je vais suppr cet attribut immediate, mais c dommage quand même...

  17. #17
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Le secret c'est de bien maitriser le processus JSF des requetes;
    Sans cela on va pas plus loin qu'avec du html de base je pense.

    Bonne chance pour la suite. Et bonne lecture surtout

  18. #18
    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
    Tu veux le immediate=true sur tes 2 composants, le UIInput et le UICommand.
    Je pense que tu ne dois pas implémenté de valueChangeListener dans ce cas précis, mais j'ai peut-être pas tout en main là...
    Alex

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    le pb c'est quavec ou sans Listener je ne recupére pas la valeur du champs precis que je recherche, sauf si je met immediat=false, et je ne comprend pas pourquoi...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    Ca marche !

    En fait il fallait mettre le champs et le bouton en immediate et recuperer le component dans le component form, il y a une sorte de hierarchie à la xml, je savais pas...

    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
     
    <h:outputLabel for="ville" value="Ville :"/>
    <h:inputText id="ville" value="#{personne.ville.nom}" immediate="true"/>
    <h:commandButton value="Rechercher" 
    				 actionListener="#{referentiel.findListVille}"
    				 immediate="true"/>
     
    <h:selectOneMenu id="id_ville" value="#{personne.idVille}">
    	<f:selectItems value="#{personne.listVilleFound}" />
    </h:selectOneMenu>         			
    <h:message for="id_ville"/>
     
     
    FacesContext facesContext = FacesContext.getCurrentInstance();
    UIComponent compForm = (UIComponent)facesContext.getViewRoot().findComponent("myForm");
    UIInput comp = (UIInput)compForm.findComponent("ville");
    String villeParam = (String)comp.getValue();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] Selectionner une liste en fonction des valeurs presentes
    Par Cédric P dans le forum Excel
    Réponses: 6
    Dernier message: 25/10/2010, 21h41
  2. [AJAX] liste liée a une liste liée a une liste
    Par dirty_harry dans le forum AJAX
    Réponses: 2
    Dernier message: 03/07/2009, 11h18
  3. Réponses: 5
    Dernier message: 12/03/2008, 18h16
  4. acceder à une liste contenue dans une liste
    Par CPI_en_mousse dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 12/06/2007, 08h33
  5. remplir une liste à partir d'une liste
    Par LeXo dans le forum Access
    Réponses: 7
    Dernier message: 14/04/2006, 12h29

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