Skip to content

TreeGrid SelectionListener out of sync with Dataprovider refresh #12017

@ShawnRG

Description

@ShawnRG

Info

  • Vaadin Framework version: 8.10.5
  • Web container name and version: Tomcat 8.5.55

Issue description

Re-selecting cached item after a dataprovider refresh

By dataprovider refresh I mean, clearing data from TreeData and adding data again

upon inspecting the the item returned by TreeGrid.asSingleSelect().getValue() I can verify that it's still the same cached item, when adding a small delay in the selection listener before printing the value, I do get the new item.

Steps to reproduce the issue

Here is the basic code setup I used to reproduce this issue

        TreeData<Project> treeData = new TreeData<>();
        treeData.addItems(getProjects(), Project::getProjects);
        TreeDataProvider<Project> tdp = new TreeDataProvider<>(treeData);
        treeGrid.setDataProvider(tdp);
        layout.addComponents(treeGrid);
        setContent(layout);

        Button selectAndRefresh = new Button("Select and Refresh");
        selectAndRefresh.addClickListener(e -> {
            final Project cached = treeGrid.asSingleSelect().getValue();
            logger.info("Cached value " + System.identityHashCode(cached));
            tdp.getTreeData().clear();
            tdp.getTreeData().addItems(getProjects(), Project::getProjects);
            tdp.refreshAll();
            treeGrid.setDataProvider(tdp);

            treeGrid.asSingleSelect().select(cached);

        });

        treeGrid.addSelectionListener(selectionEvent -> {
             new Thread(() -> {
            // Adding the sleep here will give my my desired object
//                try {
//                    Thread.sleep(3000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }

                logger.info("Selection listener " + System.identityHashCode(treeGrid.asSingleSelect().getValue()));
            }).start();
        });

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions