IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

[CellTree] Effacer le dernier élément d'une CellTree


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut [CellTree] Effacer le dernier élément d'une CellTree
    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

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    C’était bien un bug GWT
    L’équipe de GWT vont appliquer les modifications nécessaires dans le CellTreeNodeView.
    A voir a la prochaine release...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2008, 16h21
  2. [EMF] suppression du dernier élément d une collection
    Par *alexandre* dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 02/04/2008, 08h25
  3. Dernier élément d'une liste
    Par nabil148911 dans le forum SQL
    Réponses: 1
    Dernier message: 03/08/2007, 12h26
  4. ne pas sélectioner le dernier élément d'une JList
    Par barbiche dans le forum Composants
    Réponses: 1
    Dernier message: 22/05/2007, 12h04
  5. Réponses: 3
    Dernier message: 25/10/2006, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo