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
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());
	}
}
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
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());
			}
		}
	}
}
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
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);
 
...
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
 
 
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;
	}
}
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
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());
	}
}
Merci d'avance pour votre aide.