Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Пагинация, как правильно, как выбрать середину и какие варианты есть? / 25 сообщений из 66, страница 1 из 3
05.02.2018, 23:20
    #39597124
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Привет!

Дошло дело до вэб, и встал вопрос "а как же правильно отображать 'табличные данные'?". Мне это видится так.

Конечно же с фиксированным количеством строк на странице, ну или динамически отталкиваться от разрешения экрана и все равно фиксировать количество.
Дальше интересней - как же загружать и отображать данные:
1) Грузить сразу всё, и существующими средствами javascript типа DataTables, Paginations или другими подобными, отображать. Такой вариант думаю подходит для данных, где не более 150-200 строк. Решения видел реально красивые и афигеновские, с различными сортировками, динамическим поиском, но требуют сразу все данные, а если их очень много???...
2) Грузить данные равные количеству строк одной страницы. А вот как формировать пагинацию на клиенте? Вручную можно, но нет желания изобретать велосипед. Попадались ранее варианты, которым не придал значения из-за тяжести реализации. Должно быть что-то крайне простое. Такое куда при создании в json передаешь значения типа:
- всего записей
- всего строк
- всего страниц
- текущая страница
- и собственно сами данные
Подскажите что есть из готовых лайт-вариантов? Куда смотреть и где копать. Или я в корне ошибаюсь?
...
Рейтинг: 0 / 0
05.02.2018, 23:41
    #39597128
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Imperous,
брать готовое типа:
https://demos.telerik.com/kendo-ui/grid/index
...
Рейтинг: 0 / 0
06.02.2018, 02:33
    #39597160
Nebo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Imperous,

Можете глянуть как пагинация сделана здесь http://www.jhipster.tech
...
Рейтинг: 0 / 0
06.02.2018, 05:27
    #39597169
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Imperous,

Spring data jpa .
Из коробки пагинация, фильтрация и REST-API ( HATEOAS )
...
Рейтинг: 0 / 0
06.02.2018, 11:50
    #39597312
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
о, интересно, спасибо, буду смотреть.

при первом приближении понравился вариант
Petro123Imperous,
брать готовое типа:
https://demos.telerik.com/kendo-ui/grid/index
...
Рейтинг: 0 / 0
06.02.2018, 11:59
    #39597321
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Imperousо, интересно, спасибо, буду смотреть.

при первом приближении понравился вариант
Petro123Imperous,
брать готовое типа:
https://demos.telerik.com/kendo-ui/grid/index У меня есть подозрение (посмотрел в отладчике хрома), что он грузит данные целиком. Для современных браузеров это не страшно.
...
Рейтинг: 0 / 0
06.02.2018, 12:46
    #39597381
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
am_sasa,
На данном этапе тебе не нужно. А потом оптимизируешь или другую таблу возьмешь.
...
Рейтинг: 0 / 0
06.02.2018, 13:10
    #39597406
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Пример разбивки на страницы в памяти:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static <T> List<List<T>> chunk(final Iterable<T> iterable, final int size) {
        int index = 0;
        int length = size(iterable);
        final List<List<T>> result = new ArrayList<List<T>>(length / size);
        while (index < length) {
            result.add(new ArrayList(iterable).subList(index, Math.min(length, index + size)));
            index += size;
        }
        return result;
    }



С уважением, Валентин
...
Рейтинг: 0 / 0
06.02.2018, 13:25
    #39597417
unregestered
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Valentin KolesnikovПример разбивки на страницы в памяти:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static <T> List<List<T>> chunk(final Iterable<T> iterable, final int size) {
        int index = 0;
        int length = size(iterable);
        final List<List<T>> result = new ArrayList<List<T>>(length / size);
        while (index < length) {
            result.add(new ArrayList(iterable).subList(index, Math.min(length, index + size)));
            index += size;
        }
        return result;
    }



С уважением, Валентин

Зачем велосипедить? https://google.github.io/guava/releases/15.0/api/docs/com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)
...
Рейтинг: 0 / 0
06.02.2018, 13:32
    #39597420
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Метод size() забыл добавить.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static int size(final Iterable<?> iterable) {
        if (iterable instanceof Collection) {
            return ((Collection) iterable).size();
        }
        int size;
        final Iterator<?> iterator = iterable.iterator();
        for (size = 0; iterator.hasNext(); size += 1) {
            iterator.next();
        }
        return size;
    }



С уважением, Валентин
...
Рейтинг: 0 / 0
06.02.2018, 13:43
    #39597430
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
mad_nazgulImperous,

Spring data jpa .
Из коробки пагинация, фильтрация и REST-API ( HATEOAS )+ сортировка по указанному полю
...
Рейтинг: 0 / 0
06.02.2018, 13:43
    #39597431
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
am_sasa....Для современных браузеров это не страшно.
Когда 3-и года назад обсуждали пагинацию, разработчик системы при провел тест зугрузки > 100 000 записей из справочника в IE. IE даже не поперхнулся, компьютер даже не заметил (комп был не сильно мощный). ===> т.ч. разработчик принял решение, что пагинация даром не нужна, а будет нужна, тогда он ее и реализует )))

AFAIK Т.ч. такой вариант тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.01.2021, 20:12
    #40033251
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Valentin Kolesnikov
Метод size() забыл добавить.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static int size(final Iterable<?> iterable) {
        if (iterable instanceof Collection) {
            return ((Collection) iterable).size();
        }
        int size;
        final Iterator<?> iterator = iterable.iterator();
        for (size = 0; iterator.hasNext(); size += 1) {
            iterator.next();
        }
        return size;
    }




С уважением, Валентин

только этот iterator сначала надо посчитать = собрать в него ВСЕ возможные строки
и почему то именно этот (основной) момент тут не обсуждается...

допустим там 5 таблиц с миллионами записей
и надо свести их вместе + сделать тяжёлый фильтр
А потом, чтобы показать кол-во страниц, надо посчитать кол-во строк после этого сложного фильтра...
...которых там могут быть миллионы
Конечно легко взять одну таблицу и вытащить из неё кол-во, а потом поделить на размер страницы.
Очень интересно тут выводить этот невероятно сложный алгоритм...
А вот как решают реальную проблему, из реального мира?
...
Рейтинг: 0 / 0
03.01.2021, 21:39
    #40033284
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
tip78,
JPA 2.2 появился скроллируемый стрим
getResultStream()
В шарпе это уже несколько лет.
...
Рейтинг: 0 / 0
05.01.2021, 13:35
    #40033598
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Imperous
Привет!

Дошло дело до вэб, и встал вопрос "а как же правильно отображать 'табличные данные'?". Мне это видится так.

Конечно же с фиксированным количеством строк на странице, ну или динамически отталкиваться от разрешения экрана и все равно фиксировать количество.
Дальше интересней - как же загружать и отображать данные:
1) Грузить сразу всё, и существующими средствами javascript типа DataTables, Paginations или другими подобными, отображать. Такой вариант думаю подходит для данных, где не более 150-200 строк. Решения видел реально красивые и афигеновские, с различными сортировками, динамическим поиском, но требуют сразу все данные, а если их очень много???...
2) Грузить данные равные количеству строк одной страницы. А вот как формировать пагинацию на клиенте? Вручную можно, но нет желания изобретать велосипед. Попадались ранее варианты, которым не придал значения из-за тяжести реализации. Должно быть что-то крайне простое. Такое куда при создании в json передаешь значения типа:
- всего записей
- всего строк
- всего страниц
- текущая страница
- и собственно сами данные
Подскажите что есть из готовых лайт-вариантов? Куда смотреть и где копать. Или я в корне ошибаюсь?


Есть метод для разбивки списка на страницы.

Код: java
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.
    public static <T> List<List<T>> chunk(final Iterable<T> iterable, final int size) {
         if (size <= 0) {
            return newArrayList();
         }
         return chunk(iterable, size, size);
    }

    public static <T> List<List<T>> chunk(final Iterable<T> iterable, final int size, final int step) {
        if (step <= 0 || size < 0) {
            return newArrayList();
        }
        int index = 0;
        int length = size(iterable);
        final List<List<T>> result = new ArrayList<>(size == 0 ? size : (length / size) + 1);
        while (index < length) {
            result.add(newArrayList(iterable).subList(index, Math.min(length, index + size)));
            index += step;
        }
        return result;
    }

    public static <T> List<List<T>> chunkFill(final Iterable<T> iterable, final int size, final T fillValue) {
        if (size <= 0) {
            return newArrayList();
        }
        return chunkFill(iterable, size, size, fillValue);
    }

    public static <T> List<List<T>> chunkFill(final Iterable<T> iterable, final int size,
        final int step, final T fillValue) {
        if (step <= 0 || size < 0) {
            return newArrayList();
        }
        final List<List<T>> result = chunk(iterable, size, step);
        int difference = size - result.get(result.size() - 1).size();
        for (int i = difference; 0 < i; i--) {
            result.get(result.size() - 1).add(fillValue);
        }
        return result;
    }



Хорошего вам дня!
...
Рейтинг: 0 / 0
05.01.2021, 20:01
    #40033687
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Вот вы чудаки-некроманты. Автор спрашивал еще в 2018 году.
...
Рейтинг: 0 / 0
05.01.2021, 21:39
    #40033700
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
а зачем темы плодить, если есть такая же
...
Рейтинг: 0 / 0
05.01.2021, 22:04
    #40033704
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Хорошо я еще подкину вопрос.

Как известно база данных - это источник живой. Динамичный. И пока вы читали страницу №1,
в определенном порядке, страница №1 успела обновится. В нее вставились или удалились строки.
Далее вы нажали PageDown...

Вопрос. Как вы отработаете эту ситуацию? Вариантов много. Но предложение - прогрузить всю таблицу
в коллекцию
- мы не будем расматривать. Это глупое предложение.

Равно как и прогрузить всё на клиент я тоже не буду рассматривать.
...
Рейтинг: 0 / 0
05.01.2021, 22:15
    #40033709
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
mayton,
Все придумано до нас.
Показываете следующую пачку записей.
Образец гугл поиск
...
Рейтинг: 0 / 0
06.01.2021, 00:32
    #40033736
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Этот вопрос вобщем-то затрагивает изоляцию транзакций. Как сделаете - так и будет. Но 99% пагинаций
что я видел - делали на каждую новоу страницу - новый курсор и неявно BEGIN/END.

Как следствие - либо потерянные records при PageDown либо фантомы.

Вопрос как с этим работает хибернейт - это домашнее задание. Посмотрите сами.
...
Рейтинг: 0 / 0
06.01.2021, 08:16
    #40033762
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
mayton
Как известно база данных - это источник живой. Динамичный. И пока вы читали страницу №1,
в определенном порядке, страница №1 успела обновится. В нее вставились или удалились строки.
Далее вы нажали PageDown...

Вопрос. Как вы отработаете эту ситуацию?

ну обычно через вебсокеты вылазит сообщение "появились новые сообщения. Обновите страницу"
или вообще ничё не вылазит, как на форумах
...
Рейтинг: 0 / 0
06.01.2021, 11:41
    #40033782
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
tip78
mayton
Как известно база данных - это источник живой. Динамичный. И пока вы читали страницу №1,
в определенном порядке, страница №1 успела обновится. В нее вставились или удалились строки.
Далее вы нажали PageDown...

Вопрос. Как вы отработаете эту ситуацию?

ну обычно через вебсокеты вылазит сообщение "появились новые сообщения. Обновите страницу"
или вообще ничё не вылазит, как на форумах

Чтобы через вебсокет что-то вылезло - это еще надо запрограммировать. Тоесть то что вы сказали
это работает. Но это просто часть стека. Самая мясная часть еще не обсуждалась.
...
Рейтинг: 0 / 0
06.01.2021, 12:22
    #40033787
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
ну, в зависимости от того, что надо, подход может быть разным, но при скроллинге вниз запросто вешается listener, который шлёт AJAX-запрос
другой вариант с другой стороны - при изменениях на данном клиенте (например) вешается флаг об изменениях и шлётся всем, кто страницу эту смотрит
а можно вообще страницу обновлять (или кусок её)
но чаще всё это нецелесообразный гемор.
...
Рейтинг: 0 / 0
06.01.2021, 12:32
    #40033788
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
Блин... напиши на back как это сделать.
...
Рейтинг: 0 / 0
06.01.2021, 12:50
    #40033796
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пагинация, как правильно, как выбрать середину и какие варианты есть?
tip78
другой вариант с другой стороны - при изменениях на данном клиенте (например) вешается флаг об изменениях и шлётся всем, кто страницу эту смотрит
а можно вообще страницу обновлять (или кусок её)
а можно вставить новые данные и выделить их цветом или фоном - как подскажет фантазия
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Пагинация, как правильно, как выбрать середину и какие варианты есть? / 25 сообщений из 66, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]