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 :

[RichFaces] Pour que la Suggestionbox mette à jour plusieurs champs


Sujet :

JSF Java

  1. #1
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut [RichFaces] Pour que la Suggestionbox mette à jour plusieurs champs
    Hello,

    Petite question à propos des suggestion-box de RF:
    Si j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:inputText id="myField" .../>
    <rich:suggestionBox for="myField".../>
    la suggestion-box va servir à remplir, avec la valeur sélectionnée, le champ myField.
    Admettons que mon suggestion-box itère sur une liste d'objet de classe Bidule (c-a-d que dans mon suggetsion-box, je vais avoir var="truc" avec truc en tant qu'instance de Bidule). Admettons aussi que ma classe Bidule à 2 champs : id et label.

    Ce que j'aimerais, c'est que mon suggestion-box, quand je choisis un élément suggéré, remplisse 2 input texts, l'un avec la valeur du label de mon choix, l'autre avec son ID :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:inputText id="biduleId" .../>
    <h:inputText id="biduleLabel" .../>
    <rich:suggestionBox ??? .../>
    Comment faire cela ?
    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

  2. #2
    Expert confirmé
    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
    Par défaut
    Bonjour,
    C'est ton jour de chance amigos: je me suis cassé la gueule sur ça durant des jours y'a deux semaines

    Bref, allons y:
    Disosns que t'as deux inputs avec un suggestBox sur le premier:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <h:inputText id="f1" value="#{bean.field1}" />
    <h:inputText id="f2" value="#{bean.field2}" />
     
    <rich:suggestionbox for="f1"
    	suggestionAction="#{bean.autocomplete}"
    	var="f" fetchValue="#{f.f1}">
    	<h:column>
    		<h:outputText value="#{f.f1}" />
    	</h:column>
    	<h:column>
    		<h:outputText value="#{f.f2}" />
    	</h:column>
    </rich:suggestionbox>

    On commence par ajouter une fonction JS comme celleci:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <a4j:jsFunction name="f1Change"
    	action="#{bean.onF1Change}"
    	reRender="f2" />

    qui appèle une méthode onF1Change de ton bean et redessine f2 après le retour.

    Ensuite, on modifie le suggestBox en ajoutant un handler onselect:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <rich:suggestionbox for="f1"
    	suggestionAction="#{bean.autocomplete}"
    	var="f" fetchValue="#{f.f1}" onselect="f1Change();">
    où f1Change() est la fonction qu'on vient de définir:

    et hop ! reste plus qu'ajouter l'action onF1Change dans ton managed bean qui remplies le champ avec lequel f2 est bindé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public String onF1Change() {
      //f1 est déjà remplie par le suggestion box
      f2 = suiteDeF1(f1);
      return null;
    }
    Bonne chance

    P.S.: le suggest + les inputs + le a4j:jsFunction doivent être dans un même formulaire.

  3. #3
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Merci pour ta réponse djo.mos.
    Bon, c'était pas pour moi, mais le procédé me parait ok. Reste que j'imaginais qu'il y avait une solution plus simple
    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

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 12
    Par défaut
    Je me permets de remonter le message, car je suis assez intéressé par ta solution, mais je n'ai pas compris la dernière étape :
    public String onF1Change() {
    //f1 est déjà remplie par le suggestion box
    f2 = suiteDeF1(f1);
    return null;
    }

    Qu'est ce qu'il faut mettre dans suiteDeF1 ?

    Cordialement,
    Matthieu

  5. #5
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par psycocouac Voir le message
    Je me permets de remonter le message, car je suis assez intéressé par ta solution, mais je n'ai pas compris la dernière étape :
    public String onF1Change() {
    //f1 est déjà remplie par le suggestion box
    f2 = suiteDeF1(f1);
    return null;
    }

    Qu'est ce qu'il faut mettre dans suiteDeF1 ?

    Cordialement,
    Matthieu
    Bah c'est pas figé, mais en gros, ça doit renseigner le champ f2 en fonction de la valeur de f1 ...

    Genre si on remplit le nom dans f1, on renseigne le prénom dans f2.

  6. #6
    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
    Une autre solution est possible en utilisant juste a4j:support et f:setPropertyActionListener:

    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:inputText id="f1" value="#{bean.field1}" />
    <h:inputText id="f2" value="#{bean.field2}" />
     
    <rich:suggestionbox for="f1"
    	suggestionAction="#{bean.autocomplete}"
    	var="f" fetchValue="#{f.f1}">
    <a4j:support event="onselect" reRender="f2"> 
    <f:setPropertyActionListener value="#{f.f2}" target="#{bean.field2}" />
    </a4j:support>
    	<h:column>
    		<h:outputText value="#{f.f1}" />
    	</h:column>
    	<h:column>
    		<h:outputText value="#{f.f2}" />
    	</h:column>
    </rich:suggestionbox>
    Elle est dans l'article Richfaces/JSF en cours, qui attend des relecteurs...
    à bon entendeur ..

  7. #7
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Il y a tout de même un souci à la première solution:
    en prenant un exemple concret:
    le champ 1 est le code postal.
    Sur selection dans la suggestionBox (qui contient Cp et ville), l'utilisateur choisit la troisième ville avec le code postal 41400.
    Comment mettre à jour le champ 2 (ville) avec la bonne ville correspondante?

    En vous re-remerciant,

  8. #8
    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 Tcharl Voir le message
    Il y a tout de même un souci à la première solution:
    en prenant un exemple concret:
    le champ 1 est le code postal.
    Sur selection dans la suggestionBox (qui contient Cp et ville), l'utilisateur choisit la troisième ville avec le code postal 41400.
    Comment mettre à jour le champ 2 (ville) avec la bonne ville correspondante?
    En vous re-remerciant,
    il n'y a pas de souci, il suffit d'ajouter l'id du champ 2 dans le reRender..
    tu peux même mettre à jour plusieurs champs qui dépendent de code CP par exemple, si leurs valeurs n'est pas disponibles dans la page, tu peux la calculer coté java dans une actionListener du a4j:support..

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2008, 19h46
  2. Mettre à jour plusieurs champs avec la même requête, est-ce possible ?
    Par marchand_de_sable dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/06/2008, 17h36
  3. Réponses: 2
    Dernier message: 02/12/2007, 19h36
  4. Réponses: 1
    Dernier message: 03/09/2007, 11h24
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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