J'ai un widget (Main.java) qui encapsule funcionality et implémente le modèle Async Provider pour le découpage de code. De plus, j'utilise le pattern Prefetching pour que le navigateur télécharge le code immédiatement après le chargement de l'écran de bienvenue.Comportement étrange de partage de code GWT dans IE8
Le problème se pose dans IE8. Si j'utilise le widget principal sans faire de prélecture, tout va bien. Cependant, si je fais la prélecture en premier, puis que j'essaie d'utiliser le widget Main, le navigateur affiche uniquement le panneau central du DockLayoutPanel utilisé par le widget Principal. Dans Firefox, tout fonctionne bien.
Voici le code:
//BugTest.java
package com.bugtest.clearadd.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
public class BugTest implements EntryPoint {
@Override
public void onModuleLoad() {
Button prefetchButton = new Button("Prefetch!");
prefetchButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Main.getInstance(new AsyncCallback<Main>() {
@Override
public void onSuccess(Main result) {
PopupPanel popupPanel = new PopupPanel(true);
popupPanel
.setWidget(new Label("Prefetching finished!"));
popupPanel.center();
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
});
Button switchButton = new Button("Switch!");
switchButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Main.getInstance(new AsyncCallback<Main>() {
@Override
public void onSuccess(Main result) {
RootPanel.get().clear();
RootLayoutPanel.get().add(result);
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
});
FlowPanel flowPanel = new FlowPanel();
flowPanel.add(new Label("Bug test!"));
flowPanel.add(prefetchButton);
flowPanel.add(switchButton);
RootPanel.get().add(flowPanel);
}
}
//Main.java
package com.bugtest.clearadd.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ResizeComposite;
public class Main extends ResizeComposite {
private static Main instance = null;
public static void getInstance(final AsyncCallback<Main> callback) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onSuccess() {
if (instance == null) {
instance = new Main();
}
callback.onSuccess(instance);
}
@Override
public void onFailure(Throwable reason) {
callback.onFailure(reason);
}
});
}
private Main() {
DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Unit.EM);
dockLayoutPanel.addNorth(new Label("North!"), 7);
dockLayoutPanel.addWest(new Label("West!"), 15);
dockLayoutPanel.add(new Label("Center! :D"));
initWidget(dockLayoutPanel);
}
}
Est-ce que quelqu'un sait ce que ça pourrait être? Merci d'avance.
EDIT: J'ai remarqué que si je change les unités DockLayoutPanel en PX, tout fonctionne correctement. Est-ce un bug ou il me manque quelque chose? Merci encore. : P