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

GWT et Vaadin Java Discussion :

Affichage problématique dans une liste déroulante


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Par défaut Affichage problématique dans une liste déroulante
    Bonjour,

    J'ai un gros problème que je n'arrive pas à régler malgré mes recherches sur internet et mes divers essais et modifications du code.
    Voici ce qu'il se passe: j'ai un DTO qui s'appelle SensorFamily et je voudrais en afficher la liste des noms dans une liste déroulante dans la vue des sensor.
    J'ai donc un DTO dont voici une partie de 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
    public class SensorFamilyDTO implements IsSerializable{
     
    	private long id=-1;	
    	private String name;
     
    	public long getId() {
    		return id;
    	}
    	public void setId(long id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    .. etc.

    Je souhaite réaliser la liste des sensorFamily: j'ai donc créer un service SensorFamilyServiceImpl dont voici le code utile:
    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
    public class SensorFamilyServiceImpl extends RemoteServiceServlet implements
    SensorFamilyService {
     
     
    	public SensorFamilyServiceImpl() {
     
    	}
     
    /**
             * Allow to have a list of SensorFamilyDTO.
             */
    	@Override
    	public List<SensorFamilyDTO> getSensorFamilies() {
     
    		List<SensorFamily> resultstmp = null;
    		PersistenceManager pm = PMF.getManager();
    		Query query;
     
    		try {
    			query = pm.newQuery(SensorFamily.class);
    			query.setOrdering("id asc");
    			resultstmp = (List<SensorFamily>) query.execute();
    		} catch (Exception e) {
    		} finally {
    			pm.close();
    		}
     
    		List<SensorFamilyDTO> sensorFamilyDTOList = new ArrayList<SensorFamilyDTO>();
     
    		for(SensorFamily sensorFam : resultstmp) {
    			sensorFamilyDTOList.add(getSensorFamilyDTO(sensorFam));
    		}
     
    		return sensorFamilyDTOList;
    	}
     
    	/**
             * Allow to have a list of string of the name of SensorFamilyDTO.
             */
    	@Override
    	public List<String> getSensorFamiliesString() {
    		List<SensorFamilyDTO> sensorFamDTO = getSensorFamilies(); 
    		List<String> sensorFam = new ArrayList<String>();
    		for(SensorFamilyDTO sensor : sensorFamDTO) {
    			sensorFam.add(sensor.getName());
    		}
     
     
    		sensorFam.add("String");
     
    		return sensorFam;
    				//SensorFamily.queryName();
    	}
    Ce code est utilisé avec des interface SensorFamilyService et SensorFamilySerivceAsync qui fonctionnent bien.
    J'utilise MVP et voici le code utile de mon Presenter:
    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
    public void onGoToSensorEditionPage(SensorDTO sensor) {
    	
    		// Start loading indicator as data is being retrieved
    		eventBus.setLoading(true);
    
    		if (sensor == null) {
    			eventBus.showInDialog("Ajout d'un capteur", view.getViewWidget());
    			sensor = new SensorDTO();
    		} else {
    			eventBus.showInDialog("Edition d'un capteur", view.getViewWidget());
    		}
    		this.sensor = sensor;		
    		
    		service.getSensorFamilies(new AsyncCallback<List<SensorFamilyDTO>> () {
    
    			@Override
    			public void onSuccess(List<SensorFamilyDTO> result) {
    				List<String> liste = new ArrayList<String>();
    				String s =null;
    				for (SensorFamilyDTO sensorF: result ) {
    							
    					liste.add(sensorF.getName() );
    				}
    				
    				liste.add("string");
    				
    				
    				view.setSensorFamilyListString(liste);
    				eventBus.setLoading(false);
    			}                                                                                                                                                                                                          
    			@Override
    			public void onFailure(Throwable caught) {
    				view.setSensorFamilyList(null);
    			}
    		});
    et enfin dans la vue, j'ai réalisé la liste déroulante. Le code en gras et en rouge est celui qui me pose problème.
    Voici la vue:
    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
    @UiField(provided = true) 
    	ValueListBox<String> listboxSensorFamily = new ValueListBox<String>(new Renderer<String>(){
    		    @Override public String render(String object){
     
    		        return object;
    		      }
    		      @Override public void render(String object,Appendable appendable) throws IOException {
    		    	  String s = render(object);
    		    	  appendable.append(s);
    		      }
    		    }
    		  );
    public void setSensorFamilyListString ( List<String> sensorFam) {
     
    		listboxSensorFamily.setAcceptableValues(sensorFam);
    		textboxListe1.setText(sensorFam.get(0));
    		textboxListe2.setText(sensorFam.get(2));
    	}
    J'ai effectué plusieurs essais et je suis sure de récupérer tous les SensorFamilyDTO car quand je change le code en rouge par liste.add(sensorF.toString() ); la liste déroulante m'affiche bien les SensorFamilyDTO récupéré.
    Par contre, et voici mon problème: quand j'utilise le code avec getName(), c'est-à-dire tel que surligné en rouge, je n'obtiens que le premier nom des SensorFamily et pas les autres.
    J'ai essayé différentes méthode: faire une valueListBox de SensorFamilyDTO, faire une valueListBox de String...etc. J'ai testé que je récupérais bien tous les SensorFamilyDTO nécessaires, ce qui est bien le cas.
    Je n'arrive pas à comprendre le problème de cet affichage du premier et unique SensorFamilyDTO.
    Avez-vous une idée ou une piste pour que je puisse résoudre mon problème ou continuer mes recherches?
    Merci d'avance.

  2. #2
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Par défaut J'ai trouvé!
    Bonjour,

    En fait, j'ai trouvé la solution un peu par hasard: il suffit de remplacer la liste des String par une HashSet. Je ne comprends pas trop pourquoi car je pensais que la List acceptait des doublons. Or, elle ne me permettait pas l'affichage de données portant le même nom.
    La HashSet m'affiche toutes les données sauf celle en doublon.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/06/2007, 08h46
  2. Pb d'affichage d'une image à la volée, choisie dans une liste déroulante
    Par Angelseb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/02/2007, 10h53
  3. [MySQL] affichage automatique d'un champs suite à un choix dans une liste déroulante
    Par sanaa.ben dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/10/2006, 00h18
  4. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58
  5. Affichage des mois dans une liste déroulante
    Par Le Rebel dans le forum Langage
    Réponses: 15
    Dernier message: 20/02/2006, 13h37

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