Как использовать setSortOrderProvider в Grid Vaadin 8?

Я пытаюсь использовать компонент сетки. Мне нужно определить порядок столбцов, я использую этот проект: https://github.com/vaadin/tutorial/tree/v8-step4

И я добавляю этот код:

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
    .setCaption("Name")
    .setSortOrderProvider(direction -> Stream.of(
            new QuerySortOrder("lastName", direction)
            ));

grid.setSortOrder(GridSortOrder.asc(name));

Но я не получаю ожидаемых результатов, меня упорядочивают по имени, а затем по фамилии, но мне нужны результаты, упорядоченные по фамилии.

У вас была такая же проблема? Как вы ее решили?

Спасибо.


person Luis Cordn Tortulec    schedule 08.01.2018    source источник
comment
Ваш Grid использует поставщик данных в памяти, такой как ListDataProvider?   -  person Steffen Harbich    schedule 09.01.2018
comment
Привет, Штеффен. Спасибо, что спросили. Я использую setItems: List‹Customer› customers = service.findAll(filterText.getValue()); grid.setItems (клиенты);   -  person Luis Cordn Tortulec    schedule 09.01.2018
comment
Хорошо, вы установили столбцы сортировки по умолчанию? Я имею в виду, что если вы не хотите щелкать заголовок столбца для сортировки, вам нужно вызвать setSortOrder на вашем Grid при инициализации.   -  person Steffen Harbich    schedule 10.01.2018
comment
Я пытаюсь добавить один, но получаю тот же результат с использованием или без использования setSortOrder: grid.setSortOrder(GridSortOrder.asc(name));   -  person Luis Cordn Tortulec    schedule 10.01.2018
comment
Можете ли вы предоставить весь код сетки, включая код компонента клиента?   -  person Steffen Harbich    schedule 11.01.2018
comment
Привет, Штеффен, я изменяю вопрос, добавляя проект, который я использую (учебник Vaadin), и код, который я использую, чтобы попытаться отсортировать столбец. Спасибо за ваше время ^_^   -  person Luis Cordn Tortulec    schedule 11.01.2018


Ответы (2)


Я копался в коде и выяснил, что нужно вызывать setComparator вместо setSortOrderProvider. Первый предназначен для поставщиков данных в памяти. К сожалению, это немного запутанно и не очень хорошо документировано.

person Steffen Harbich    schedule 11.01.2018

Я использую эту реализацию setComparator, и она работает. :)

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
        .setCaption("Name")
        .setComparator(new SerializableComparator<Customer>() {

            @Override
            public int compare(Customer arg0, Customer arg1) {
                return arg0.getLastName().compareTo(arg1.getLastName());
            }
        });

С лямбдой:

.setComparator((customer0, customer1) -> {
            return customer0.getLastName().compareTo(customer1.getLastName());
        });

и этот другой вариант:

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
        .setCaption("Name")
        .setComparator(grid.getColumn("lastName").getComparator(SortDirection.ASCENDING));
person Luis Cordn Tortulec    schedule 12.01.2018