powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Пагинация, как правильно, как выбрать середину и какие варианты есть?
25 сообщений из 66, страница 1 из 3
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #39597124
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

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

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

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

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

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

при первом приближении понравился вариант
Petro123Imperous,
брать готовое типа:
https://demos.telerik.com/kendo-ui/grid/index У меня есть подозрение (посмотрел в отладчике хрома), что он грузит данные целиком. Для современных браузеров это не страшно.
...
Рейтинг: 0 / 0
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #39597381
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasa,
На данном этапе тебе не нужно. А потом оптимизируешь или другую таблу возьмешь.
...
Рейтинг: 0 / 0
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #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
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #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
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #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
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #39597430
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulImperous,

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

AFAIK Т.ч. такой вариант тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #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
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #40033284
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,
JPA 2.2 появился скроллируемый стрим
getResultStream()
В шарпе это уже несколько лет.
...
Рейтинг: 0 / 0
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #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
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #40033687
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вы чудаки-некроманты. Автор спрашивал еще в 2018 году.
...
Рейтинг: 0 / 0
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #40033700
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем темы плодить, если есть такая же
...
Рейтинг: 0 / 0
Пагинация, как правильно, как выбрать середину и какие варианты есть?
    #40033704
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо я еще подкину вопрос.

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

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

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

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

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

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

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

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

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

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


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