Apres multiple essaie je n'ai pas trouve de solution a mon probleme avec le CellTree. La version de GWT: 2.3

Voici un code simplifier de mon model.

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
 
public class CellTreeModel implements TreeViewModel {
 
    private ListDataProvider<String> listDataProvider = new ListDataProvider<String>();
 
    private static int TEST_NUMBER = 0;
 
    public CellTreeModel() {
        listDataProvider.setList(new ArrayList<String>());
        add();
        add();
        add();
        add();
    }
 
    @Override
    public <T> NodeInfo<?> getNodeInfo(T value) {
        if (value == null) {
            List<HasCell<String, ?>> hasCells = new ArrayList<HasCell<String, ?>>();
            hasCells.add(new HasCell<String, String>() {
                @Override
                public Cell<String> getCell() {
                    return new ButtonCell();
                }
 
                @Override
                public FieldUpdater<String, String> getFieldUpdater() {
                    return new FieldUpdater<String, String>() {
                        @Override
                        public void update(int index, final String text, String value) {
                            delete(text);
                        }
                    };
                }
 
                @Override
                public String getValue(String node) {
                    return "DELETE";
                }
            });
            hasCells.add(new HasCell<String, String>() {
                TextCell linkData = new TextCell();
 
                @Override
                public Cell<String> getCell() {
                    return linkData;
                }
 
                @Override
                public FieldUpdater<String, String> getFieldUpdater() {
                    return null;
                }
 
                @Override
                public String getValue(String text) {
                    return text;
                }
            });
            return new DefaultNodeInfo<String>(listDataProvider, new CompositeCell(hasCells));
        }
        return null;
    }
 
    @Override
    public boolean isLeaf(Object value) {
        return value instanceof String;
    }
 
 
    public void delete(final String text) {
        Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
            @Override
            public void execute() {
                if (text != null && listDataProvider.getList().contains(text)) {
                    listDataProvider.getList().remove(text);
                }
                listDataProvider.refresh();
            }
        });
 
    }
 
    public void add() {
        listDataProvider.getList().add("TEST" + TEST_NUMBER++);
    }
}
Ce model va gérer le dataProvider, dans ce cas si il n'y a qu'un seul niveau constituer d'un TextCell (TESTx) et d'un ButtonCell qui va effacer le niveau courant.
Sous Chrome et FF, ceci fonctionne parfaitement. Malheureusement sous IE8 ceci génère une exception (JavaScriptException) dans le cas ou on efface le dernier element du niveau.

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
 
ERROR: Uncaught exception escaped. com.google.gwt.core.client.JavaScriptException: (TypeError): 'firstChild' is null or not an object
	at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:237)
	at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:132)
	at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
	at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
	at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
	at com.google.gwt.dom.client.DOMImpl.getFirstChildElement(DOMImpl.java)
	at com.google.gwt.dom.client.Element$.getFirstChildElement$(Element.java:241)
	at com.google.gwt.user.cellview.client.CellTreeNodeView.getCellParent(CellTreeNodeView.java:665)
	at com.google.gwt.user.cellview.client.CellTreeNodeView.getCellParent(CellTreeNodeView.java:1044)
	at com.google.gwt.user.cellview.client.CellTreeNodeView.setKeyboardSelected(CellTreeNodeView.java:1239)
	at com.google.gwt.user.cellview.client.CellTree.keyboardSelect(CellTree.java:867)
	at com.google.gwt.user.cellview.client.CellTreeNodeView$NodeCellList$View.loadChildState(CellTreeNodeView.java:345)
	at com.google.gwt.user.cellview.client.CellTreeNodeView$NodeCellList$View.replaceAllChildren(CellTreeNodeView.java:215)
	at com.google.gwt.user.cellview.client.HasDataPresenter.resolvePendingState(HasDataPresenter.java:1360)
	at com.google.gwt.user.cellview.client.HasDataPresenter.access$3(HasDataPresenter.java:1117)
	at com.google.gwt.user.cellview.client.HasDataPresenter$2.execute(HasDataPresenter.java:1042)
	at com.google.gwt.core.client.impl.SchedulerImpl$Task$.executeScheduled$(SchedulerImpl.java:50)
	at com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:229)
	at com.google.gwt.core.client.impl.SchedulerImpl.flushFinallyCommands(SchedulerImpl.java:328)
	at com.google.gwt.core.client.impl.Impl.exit(Impl.java:238)
	at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:229)
	at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
	at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
	at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167)
	at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
	at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
	at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
	at java.lang.Thread.run(Thread.java:662)
J'ai déjà ouvert un ticket sur http://code.google.com/p/google-web-...detail?id=6677, malheureusement ils ne semblent pas s'y intéresser

Si qq'un a déjà été confronté a ce soucis et a trouvé une solution, je suis preneur. Ou si qq'un voit dans ce code une erreur de conception, je suis preneur aussi de toute suggestion.

Merci