Je développe actuellement une application en GWT (+GXT).

Cette dernière affiche un TabPanel au milieu d'un BorderLayout.

Dans chaque item de mon TabPanel, j'affiche une page si cette dernière n'est pas déjà affichée (même titre).

Quand j'affiche ma page (item) dans un RootLayoutPanel, j'ai toutes les infos désirées.

Quand je l'affiche via mon TabPanel, rien ne s'affiche à l'intérieur de mon TabItem (tout est blanc).

Mon controleur :
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
 
public class MyControler implements Presenter, ValueChangeHandler<String> {
 
	private final EventBus eventBus;
	private SerietvGinInjector injector;
	private HasWidgets container;
	private MyView vuePrincipale;
	private MessageBox waitBox; 
 
	public MyControler(MyGinInjector injector) {
 
		this.injector = injector;
		this.eventBus = injector.getEventBus();
	}
 
 
	public void go(HasWidgets container) {
 
		this.container = container;
 
		vuePrincipale = new MyView();
 
		this.container.add(vuePrincipale);
 
		if ((History.getToken() != null) && (History.getToken().equals(""))) {
			History.newItem(Constante.MenuAccueil);
		} else {
			// Déclenchement de l'état initial de l'historique 
			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.ConsultFiche.equals(token)) {
				PresenterGTX presenter = new FichePresenter(injector, new FicheView(injector));
				presenter.go(vuePrincipale);
			}
		}
	}

ma vue principale
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
93
94
95
96
97
 
public class MyView extends LayoutContainer {
 
	private Viewport viewport;
 
	private TitreWidget north;;
	private MenuWidget west;
	private TabPanel center;
 
	public MyView() {
		super();
	}
 
	protected void onRender(Element target, int index) {   
		super.onRender(target, index);   
 
		viewport = new Viewport();
		viewport.setLayout(new BorderLayout());
		viewport.setStyleAttribute("padding", "10px");
 
		north = new TitreWidget();
 
		west = new MenuWidget();
 
		center = new TabPanel();
		center.setMinTabWidth(115);
		center.setResizeTabs(true);
		center.setAnimScroll(true);
		center.setTabScroll(true);
		center.setCloseContextMenu(true);
 
		BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, 50);
		northData.setCollapsible(true);
		northData.setFloatable(true);
		northData.setHideCollapseTool(true);
		northData.setSplit(true);
		northData.setMargins(new Margins(0, 0, 5, 0));
 
		BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 150);
		westData.setSplit(true);
		westData.setCollapsible(true);
		westData.setMargins(new Margins(0,5,0,0));
 
		BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER);
		centerData.setMargins(new Margins(0,5,0,0));
 
		viewport.add(north, northData);   
		viewport.add(west, westData);   
		viewport.add(center, centerData);   
 
		add(viewport);
	}
 
	public boolean add(Widget widget) {
 
		if (widget instanceof ListeTitreView) { 
			addItem(widget, "Liste des titres");
		} else {
			if (widget instanceof FicheView) {
				String titre = ((FicheView) widget).getTitre();
 
				addItem(widget, "Fiche ".concat(titre));
			} else {
				super.add(widget);
			}
		}
 
		return attachChildren;
	}
 
	private void addItem(Widget widget, String titre) {
 
		String itemListe = null;
 
		for(TabItem item : center.getItems()) {
			if (titre.equals(item.getText())) {
				itemListe = item.getId();
				break;
			}
		}
 
		if (null != itemListe) {
			// L'item existe deja
			center.getItemByItemId(itemListe).removeAll();
			center.getItemByItemId(itemListe).add(widget);
 
			center.setSelection(center.getItemByItemId(itemListe));
		} else {
			// Creation de l'item
			MyTabItem tabItem = new MyTabItem(titre);
			tabItem.add(widget);
 
			center.add(tabItem);
			center.setSelection(center.getItem(center.getItemCount()));
		}
	}
}
mon TabItem
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
 
public class MyTabItem extends TabItem {
 
	public MyTabItem(String title) {
		super(title);
 
		setBorders(false);
		setScrollMode(Scroll.AUTO);
		setText(title);
 
		setLayout(new FitLayout());
		setWidth("100%");
		setClosable(true);
	}
}

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
 
public class FichePresenter implements PresenterGTX {
 
	private final Display display;
	private MyGinInjector injector;
 
	public interface Display {
 
		Widget asWidget();
	}
 
	public FichePresenter(MyGinInjector injector, Display view) {
		this.injector = injector;
		this.display = view;
	}
 
	public void go(LayoutContainer container) {
	    container.add(display.asWidget());
	}
ma view FichView
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
 
public class FicheView extends LayoutContainer implements FichePresenter.Display {
 
	/** Injecteur */
	MyGinInjector injector;
 
	/** Bus d'évènements */
	private EventBus eventBus;
 
	/** la fiche courante */
	private Fiche fiche;
 
	public FicheView(MyGinInjector injector) {
		super();
 
		this.injector = injector;
		this.eventBus = injector.getEventBus();
 
		fiche = Contexte.getFiche();
	}
 
	protected void onRender(Element parent, int index) {
		super.onRender(parent, index);
 
		setLayout(new AccordionLayout());
 
		add(new SerieWidget(injector, fiche));
		add(new ProductionWidget(injector, fiche));
		add(new CastingWidget(injector, fiche));
	}
 
	public String getTitre() {
		return serie.getTitre();
	}
 
	public Widget asWidget() {
		return this;
	}
}