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 :

Problème de mise à jour des éléments sélectionnés d'une liste avec SelectCheckboxMenu


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 22
    Points : 24
    Points
    24
    Par défaut Problème de mise à jour des éléments sélectionnés d'une liste avec SelectCheckboxMenu
    Bonjour à tous et à toutes,

    Je reviens vers vous puisque je rencontre un problème qui me semblerais être un problème de mise à jour dont je n'arrive pas à résoudre.

    Dans mon application, j'utilise le même principe que l'exemple sur le site de primefaces "SelectCheckboxMenu" http://www.primefaces.org/showcase/u...kboxMenu.xhtml, qui se présente comme suite :

    - une liste permettant de sélectionner une liste de villes.
    - un bouton permettant d'afficher dans une liste la liste des éléments sélectionnés.

    Voici le code :
    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
    <h:form>
        <h:panelGrid columns="3" cellpadding="5">
            <h:outputLabel for="menu" value="Location:" />
            <p:selectCheckboxMenu id="menu" value="#{checkboxView.selectedCities}" label="Cities"
                                  filter="true" filterMatchMode="startsWith" panelStyle="width:250px">
                <f:selectItems value="#{checkboxView.cities}" />
            </p:selectCheckboxMenu>
            <p:commandLink value="Submit" update="display" />
        </h:panelGrid>
     
        <p:outputPanel id="display" style="width:250px;padding-left:5px;margin-top:10px">
            <p:dataList value="#{checkboxView.selectedCities}" var="city" emptyMessage="No cities selected">
                #{city}
            </p:dataList>
        </p:outputPanel>
    </h:form>
    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
     
    package org.primefaces.showcase.view.input;
     
    import java.util.ArrayList;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.faces.bean.ManagedBean;
     
    @ManagedBean
    public class CheckboxView {
     
        private String[] selectedCities;  
        private List<String> cities;
     
        @PostConstruct
        public void init() {
            cities = new ArrayList<String>();
            cities.add("San Francisco");
            cities.add("London");
            cities.add("Paris");
            cities.add("Istanbul");
            cities.add("Berlin");
            cities.add("Barcelona");
            cities.add("Rome");
            cities.add("Sao Paulo");
            cities.add("Amsterdam");
        }
     
        public String[] getSelectedCities() {
            return selectedCities;
        }
     
        public void setSelectedCities(String[] selectedCities) {
            this.selectedCities = selectedCities;
        }
     
        public List<String> getCities() {
            return cities;
        }
    }
    Quand je met en place cet exemple en sélectionnant des villes, aucun élément sélectionné ne s'affiche dans la liste (puisque quand je regarde la liste "selectedCities" elle ne contient aucun élément). Je rencontre donc un problème de binding que je n'arrive pas à ressoudre.

    Est-ce que quelqu'un a déjà eu ce probleme ? Comme avez-vous fait pour le contourner ?

    Cordialement,

    fed1023

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,

    Il me semblait bien qu'il manque un truc dans le code de leur exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ManagedBean(name="checkboxView")
    Un peu dur de trouver les cities sans savoir où aller les chercher...
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  3. #3
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut faut changer 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
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    @ManagedBean
    public class CheckboxView {
     
    	private List<String> selectedCities;
    	private List<String> cities;
    	private String selectedCity;
    	private Boolean selectedCityRemoved;
     
    	@PostConstruct
    	public void init() {
    		cities = new ArrayList<String>();
    		cities.add("San Francisco");
    		cities.add("London");
    		cities.add("Paris");
    		cities.add("Istanbul");
    		cities.add("Berlin");
    		cities.add("Barcelona");
    		cities.add("Rome");
    		cities.add("Sao Paulo");
    		cities.add("Amsterdam");
    	}
     
    	public void selectedCitiessChanged(ValueChangeEvent event) {
    		List<String> oldValue = (List<String>) event.getOldValue();
     
    		List<String> newValue = (List<String>) event.getNewValue();
    		setSelectedCities(newValue);
    		if (oldValue == null) {
    			oldValue = Collections.emptyList();
    		}
     
    		if (oldValue.size() > newValue.size()) {
    			oldValue = new ArrayList<String>(oldValue);
    			oldValue.removeAll(newValue);
    			selectedCity = oldValue.iterator().next();
    			selectedCityRemoved = true;
    		} else {
    			newValue = new ArrayList<String>(newValue);
    			newValue.removeAll(oldValue);
    			selectedCity = newValue.iterator().next();
    			selectedCityRemoved = false;
    		}
     
    	}
     
    	public List<String> getSelectedCities() {
    		return selectedCities;
    	}
     
    	public void setSelectedCities(List<String> selectedCities) {
    		this.selectedCities = selectedCities;
    	}
     
    	public List<String> getCities() {
    		return cities;
    	}
     
    	public void setCities(List<String> cities) {
    		this.cities = cities;
    	}
     
    	public void changeValue(AjaxBehaviorEvent event) {
     
    		System.out.println(event);
    		System.out.println("searching with city== " + selectedCity);
    	}
     
    }
    et :
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:p="http://primefaces.org/ui">
     
      <h:head>
        <title>Test</title> 
      </h:head>
      <h:body>
        <h:form>
        <h:panelGrid columns="3" cellpadding="5">
            <h:outputLabel for="menu" value="Location:" />
            <p:selectCheckboxMenu id="menu" value="#{checkboxView.selectedCities}" label="Cities" filter="true" filterMatchMode="startsWith" panelStyle="width:250px" valueChangeListener="#{checkboxView.selectedCitiessChanged}">
                <f:selectItems value="#{checkboxView.cities}" />
                <f:ajax listener="#{checkboxView.changeValue}" render="display" />
            </p:selectCheckboxMenu>
            <p:commandLink value="Submit" update="display" />
        </h:panelGrid>
     
        <p:outputPanel id="display" style="width:250px;padding-left:5px;margin-top:10px">
            <p:dataList value="#{checkboxView.selectedCities}" var="city" emptyMessage="No cities selected">
                #{city}
            </p:dataList>
        </p:outputPanel>
    </h:form>
      </h:body>
    </html>
    Eric

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 22
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup, ça fonctionne très bien. Vous m'avez débloqué sur un problème que je traine depuis 3 mois

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 22
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous,

    J'ai voulu utiliser la même méthode mais avec des objets. Du coup, j'ai ajouté un converter avec la classe suivante :

    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
     
    package fr.sporttraining.joueur;
     
    import java.util.List;
     
    import javax.ejb.EJB;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.FacesConverter;
     
    import fr.sporttraining.ejb.joueur.JoueurInterface.JoueurLocal;
    import fr.sporttraining.user.UserHandler;
     
    @FacesConverter("joueurConverter")
    public class JoueurConverter implements Converter {
     
    	@EJB
    	private JoueurLocal objcEJBJoueur;
     
    	@Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
     
            List<Joueur> l = objcEJBJoueur.JoueursEquipeUtil(UserHandler.getCurrentUser());
            for(Joueur u : l)
            {
                if(u.getId().equals(Long.parseLong(value)))
                {
                    return u;
                }
            }
            return null;
        }
     
        public String getAsString(FacesContext fc, UIComponent uic, Object object) {
            if(object != null) {
                return String.valueOf(((Joueur) object).getId());
            }
            else {
                return null;
            }
        }   
    }
    Le problème est que quand je fais appel à mon EJB "objcEJBJoueur", il est toujours à null. Je trouve ça bizarre puisque dans mes autres classes j'arrive à l'appeler mais pas dans cette class Converter.
    Savez-vous d'où pourrait venir le problème ?

    Merci d'avance,

    Fed1023

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2011, 14h07
  2. Réponses: 11
    Dernier message: 02/06/2010, 14h02
  3. Récupération des éléments sélectionner dans une liste
    Par Jasmine80 dans le forum Interfaces Graphiques
    Réponses: 13
    Dernier message: 17/09/2009, 12h52
  4. [script.aculo.us] [Tutoriel] Modifier l'opacité des éléments sélectionnés d'une liste avec Script.aculo.us
    Par Kerod dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 13/01/2009, 21h31

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