Почему сетка не отображается в этом приложении Vaadin 11.0.0? - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу отобразить две вкладки (Providers и Products) на странице Vaadin.Providers должен содержать сетку с одной записью.

Я написал для этого следующий код:

import java.util.ArrayList;
import java.util.List;

import com.vaadin.flow.component.Text;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.tabs.Tab;
import com.vaadin.flow.component.tabs.Tabs;
import com.vaadin.flow.router.Route;

@Route("")
public class MainView extends VerticalLayout {

    public MainView() {
        final Text header = new Text("Header");
        add(header);

        final Tab productsTab = new Tab("Products");
        final Tab providersTab = new Tab("Providers");
        final Grid<LoanProvider> providersGrid = new Grid<>();
        providersGrid.addColumn(LoanProvider::getName).setHeader("Name");
        providersGrid.addColumn(LoanProvider::getRegions).setHeader("Regions");
        providersGrid.addColumn(LoanProvider::getUrl).setHeader("URL");
        providersGrid.setSizeFull();
        providersTab.add(providersGrid);
        final Tabs tabs = new Tabs(providersTab, productsTab);
        add(tabs);
        providersGrid.setItems(getLoanProviders());
    }

    private List<LoanProvider> getLoanProviders() {
        final List<LoanProvider> coll = new ArrayList<>();
        final LoanProvider sample = new LoanProvider();
        sample.setName("Provider name");
        sample.setRegions("Region1");
        sample.setUrl("http://www.someserver.com");
        coll.add(sample);
        return coll;
    }
}

public class LoanProvider {
    private String name;
    private String regions;
    private String url;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRegions() {
        return regions;
    }

    public void setRegions(String regions) {
        this.regions = regions;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

Когда я запускаю приложение, я не вижу никаких данных вProducts вкладка:

Screenshot

Как изменить код для отображения содержимого сетки?

Вызов setSizeFull и установка высоты не помогла.

1 Ответ

0 голосов
/ 13 ноября 2018

Вкладки в потоке не должны содержать содержимое страницы, теперь вы добавляете сетку к самой вкладке (сразу после текста Поставщики ).

На этой странице естьпример Tabs with pages
https://vaadin.com/components/vaadin-tabs/java-examples

В основном вы должны добавить SelectedChangeListener к компоненту вкладок, и в зависимости от того, на какой вкладке щелкнули, показать или скрыть сетку (либо с помощью setVisible, либоудалив его и повторно добавив его к родителю).

В каталоге Vaadin есть также дополнение, которое оборачивает аналогичную логику из приведенного выше примера https://vaadin.com/directory/component/paged-tabs

...