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:
.. etc.
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; }
Je souhaite réaliser la liste des sensorFamily: j'ai donc créer un service SensorFamilyServiceImpl dont voici le code utile:
Ce code est utilisé avec des interface SensorFamilyService et SensorFamilySerivceAsync qui fonctionnent bien.
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(); }
J'utilise MVP et voici le code utile de mon Presenter:
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.
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); } });
Voici la vue:
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é.
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)); }
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.
Partager