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 :

Actualisation d'un SelectOneMenu en fonction de l'autre


Sujet :

JSF Java

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant du Genie Logiciel
    Inscrit en
    Juillet 2011
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant du Genie Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 397
    Points : 73
    Points
    73
    Par défaut Actualisation d'un SelectOneMenu en fonction de l'autre
    salut a vous. j'ai deux deux SelectOneMenu. le premier contient la liste des pays et je voudrai que le second contient la liste de villes selon le pays choisi dans la première liste déroulante. pour ce faire, je procède comme suit :

    tout d'abord, dans ma liste contenant la liste des pays, j’écoute tout changement de valeur comme-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div class="form-group">
                                                                        <label class="col-lg-3 control-label" for="#{val['inscription.country']}"><h:outputText value="#{val['inscription.country']}"/><span class="required">*</span></label>
                                                                        <div class="col-lg-5">                                                              
                                                                            <h:selectOneMenu id="#{val['inscription.country']}" required="true" requiredMessage="#{val['requiredcountry']}" value="#{manageuser.country}" styleClass="form-control" validator="#{manageuser.validateCountry}" onchange="onsubmit()" valueChangeListener="#{initapp.getNamesCityByCountry}">
                                                                                <f:selectItem itemLabel="-- Choisir un Pays --" class="bold"/>
                                                                                <f:selectItems value="#{initapp.allCountry}" var="country" itemLabel="#{country.namecountry_fr_fr}" itemValue="#{country.idcountry}"/>  
                                                                                <f:ajax event="blur" render="countryMessage" />
                                                                            </h:selectOneMenu>
                                                                        </div>
                                                                        <h:message id="countryMessage" for="#{val['inscription.country']}" errorClass="erreur" /><br />
                                                                    </div>
    ensuite dans mon backing bean, ayant pour portée Application, je fais ceci pour pouvoir exécuter a chaque fois la méthode chargée de récupérer la liste des villes en fonction du pays :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void getNamesCityByCountry(ValueChangeEvent e) {
            String idselect = e.getNewValue().toString();
            Integer value = new Integer(idselect);
            this.msApplication.setListCity(this.msApplication.getIMetierLocal().getAllCity(value));
        }
    et maintenant dans la facelet, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <div class="form-group">
                                                                        <label class="col-lg-3 control-label" for="#{val['inscription.city']}"><h:outputText value="#{val['inscription.city']}"/> <span class="required">*</span></label>
                                                                        <div class="col-lg-5">
                                                                            <f:selectItem itemLabel="-- Choisir une Ville --" class="bold"/>
                                                                            <h:selectOneMenu id="#{val['inscription.city']}" required="true" requiredMessage="#{valinitapp['requiredcity']}" value="#{manageuser.city}" styleClass="form-control" validator="#{manageuser.validateCity}" >
                                                                                <f:selectItem itemLabel="-- Choisir une Ville --" class="bold"/>
                                                                                <f:selectItems value="#{initapp.allCityByNameCountry}" var="city" itemLabel="#{city.namecity}" itemValue="#{city.idcity}"/>  
                                                                                <f:ajax event="blur" render="cityMessage" />
                                                                            </h:selectOneMenu>
                                                                        </div>
                                                                        <h:message id="cityMessage" for="#{val['inscription.city']}" errorClass="erreur" /><br />
                                                                    </div>
    dans mon backing bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public List<City> getAllCityByNameCountry() {
            return this.msApplication.getListCity();
        }
    je voudrai exécuter la méthode (getAllCityByNameCountry()) ci-dessus a chaque fois pour n'avoir que la liste des villes en fonction des pays.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut
    Bonjour,
    Pour ce qui est de la méthode getNamesCityByCountry tu n'as pas besoin de faire un transtypage si l'identifiant de pays est déjà un entier.
    voici ce que je te propose

    dans ton controlleur(backend bean)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    ------
    Private integer idSelet; //identifiant de pays
    Private integer idCity; //identifiant de ville
    private List<SelectItem> listeVille;
     
    ....
     public Integer getIdSelet() {
            return idSelet;
        }
     
        public void setIdSelet(Integer idSelet) {
            this.idSelet= idSelet;
        }
     public Integer getIdCity() {
            return idCity;
        }
     
        public void setIdCity(Integer idCity) {
            this.idCity= idCity;
        }
     
    public List<SelectItem> getListeVille() {
            return listeVille;
        }
     
        public void setListeVille(List<SelectItem> listeVille) {
            this.listeVille = listeVille;
        }
     
     
         //lorsqu'un élément est choisi dans le combo-box
         // on récupèré l'id du pays puis on le passe à la méthode loadCity
         public void getNamesCityByCountry(ValueChangeEvent e) {
                  idSelet= (Integer) e.getNewValue();
                  loadCity(idSelet);
        }
     
        private void loadCity(Integer idSelet) {
            if (listeVille != null) {
                listeVille.clear();
            }
            List<Ville> liste = msApplication.getAllCityByNameCountry(idSelet); //on passe l'id de pays pour la selection des donnees
     
            if (liste == null || liste.isEmpty()) {
                return;
            }
            if (listeVille == null) {
                listeVille = new ArrayList<SelectItem>();
            }
            for (Ville v : liste) {
                listeVille.add(new SelectItem(v.getIdVille(), v.getlibelleVille()));
            }
        }

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2017, 17h05
  2. Réponses: 10
    Dernier message: 10/02/2017, 10h55
  3. Submit un formulaire et actualiser une iframe en une fonction
    Par Jobozzo dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/08/2011, 10h29
  4. actualiser zone de liste en fonction paramètres
    Par erox44 dans le forum VBA Access
    Réponses: 10
    Dernier message: 25/10/2007, 19h06
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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