Je développe en ce moment une application GWT (+ GXT).
J'ai un problème d'affichage de données dans un TabPanel :
- je lis une info en base MySQL,
- je construis mon panel en remplissant les données avec les infos,
- j'affiche mon panel.
=> lors de l'affichage le contenu du 1er tabItem ne s'affiche pas (ni libellé ni valeurs : seul le titre apparait), il faut cliquer sur un des autres items puis revenir au 1er pour le voir s'afficher normalement.
Extrait du code :
EntryPoint
Contrôleur
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 package fr.pmo.gwt.serietv.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import fr.pmo.gwt.serietv.client.injection.SerietvGinInjector; import fr.pmo.gwt.serietv.client.service.SerieServiceAsync; import fr.pmo.gwt.serietv.client.service.callback.FicheCallback; public class Serietv implements EntryPoint { private final SerietvGinInjector injector = GWT.create(SerietvGinInjector.class); final SerieServiceAsync serieService = injector.getSerieService(); public void onModuleLoad() { new SerietvControleur(injector); String noFiche = " 124"; serieService.getSerie(noFiche, new FicheCallback()); } }
Panel
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 import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.RootLayoutPanel; import fr.pmo.gwt.serietv.client.fiche.FichePanel; import fr.pmo.gwt.serietv.client.injection.SerietvGinInjector; import fr.pmo.gwt.serietv.shared.Constante; public class SerietvControleur implements ValueChangeHandler<String> { SerietvGinInjector injector; public SerietvControleur(SerietvGinInjector injector) { this.injector = injector; History.addValueChangeHandler(this); if ((History.getToken() != null) && (History.getToken().equals(""))) { History.newItem(Constante.MenuAccueil); } else { History.fireCurrentHistoryState(); } } public void onValueChange(ValueChangeEvent<String> event) { String token = event.getValue(); if (token != null) { // Si le token correspond à l'affichage d'une fiche if (Constante.MenuFiche.equals(token)) { RootLayoutPanel rlp = RootLayoutPanel.get(); rlp.add(new FichePanel()); } } } }
Injection
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 import com.google.gwt.user.client.ui.FlowPanel; import fr.pmo.gwt.serietv.client.Contexte; import fr.pmo.gwt.serietv.shared.bean.metier.Serie; public class FichePanel extends FlowPanel { public FichePanel() { super(); setWidth("100%"); setHeight("100%"); Serie serie = Contexte.getSerie(); if (null != serie) { add(new TitreFichePanel(serie)); add(new DetailFichePanel(serie)); } } } import com.extjs.gxt.ui.client.widget.TabPanel; import fr.pmo.gwt.serietv.client.fiche.casting.CastingTabItem; import fr.pmo.gwt.serietv.client.fiche.production.ProductionTabItem; import fr.pmo.gwt.serietv.client.fiche.serie.SerieTabItem; import fr.pmo.gwt.serietv.shared.bean.metier.Serie; public class DetailFichePanel extends TabPanel { public DetailFichePanel(Serie serie) { super(); setPlain(true); setAutoHeight(true); add(new SerieTabItem(serie)); add(new ProductionTabItem(serie)); add(new CastingTabItem(serie)); } } import fr.pmo.gwt.serietv.client.fiche.SerietvTabItem; import fr.pmo.gwt.serietv.shared.bean.metier.Serie; public class SerieTabItem extends SerietvTabItem { static String titre = "Série"; public SerieTabItem(Serie serie) { super(titre); add(new SeriePanel(serie)); } } import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.LabelField; import com.extjs.gxt.ui.client.widget.form.MultiField; import com.google.gwt.user.client.Element; import fr.pmo.gwt.serietv.client.fiche.ConsultSerieTextField; import fr.pmo.gwt.serietv.client.fiche.SerietvFieldSet; import fr.pmo.gwt.serietv.shared.bean.metier.Serie; import fr.pmo.gwt.serietv.shared.bean.metier.activite.CommentaireDetail; public class SeriePanel extends FormPanel { Serie serie; public SeriePanel(Serie serie) { super(); this.serie = serie; setLabelWidth(150); setReadOnly(true); setLabelSeparator(""); } protected void onRender(Element parent, int index) { super.onRender(parent, index); ConsultSerieTextField<String> titreVFTF = new ConsultSerieTextField<String>(); titreVFTF.setValue(serie.getTitreVF()); titreVFTF.setFieldLabel("Titre français"); add(titreVFTF); ...
Callback
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 import com.google.gwt.inject.client.GinModules; import com.google.gwt.inject.client.Ginjector; import fr.pmo.gwt.serietv.client.service.SerieServiceAsync; @GinModules({ WidgetModule.class }) public interface SerietvGinInjector extends Ginjector { public SerieServiceAsync getSerieService(); } import com.google.gwt.core.client.GWT; import com.google.gwt.inject.client.AbstractGinModule; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.inject.Provides; import com.google.inject.Singleton; import fr.pmo.gwt.serietv.client.service.SerieService; import fr.pmo.gwt.serietv.client.service.SerieServiceAsync; public class WidgetModule extends AbstractGinModule { final private static String MODULE_URL = "/serietv/"; @Provides @Singleton public SerieServiceAsync getSerieService() { SerieServiceAsync serieService = (SerieServiceAsync) GWT.create(SerieService.class); ((ServiceDefTarget) serieService).setServiceEntryPoint(MODULE_URL + "serie"); return serieService; } }
Merci d'avance pour votre aide.
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 import com.google.gwt.user.client.History; import fr.pmo.gwt.serietv.client.Contexte; import fr.pmo.gwt.serietv.shared.Constante; import fr.pmo.gwt.serietv.shared.bean.metier.Serie; public class FicheCallback extends SerietvCallback<Serie> { /*** * Traitement de la reponse */ public void traiterReponse(Serie reponse) { Contexte.setSerie(reponse); History.newItem(Constante.MenuFiche); History.fireCurrentHistoryState(); } } import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; public abstract class SerietvCallback<T> implements AsyncCallback<T> { public abstract void traiterReponse(T reponse); public void onSuccess(T arg0) { if (arg0 != null) { traiterReponse(arg0); } else { // TODO que fait-on si la reponse est nulle ? } }; public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); } }
Partager