Pb TabItem avec GWT + GXT + Gin
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:
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:
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:
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:
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:
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.