Регистрация  |  Вход

Подскажите по pagination

Здравствуйте.
Изучаю систему и делаю задание, нужно сделать пагинацию на странице.
Делал как везде в примерах, через StandartSetController в кастом-контроллере:

public ApexPages.StandardSetController setCon {
get {
if(setCon == null){
List<Gp__c> g=[мой_запрос];
setCon = new ApexPages.StandardSetController(g);
setCon.setPageSize(5);
}
return setCon;
}
set;
}
public List<Gp__c> Gps {
get {
return (List<Gp__c>)setCon.getRecords();
}
set;
}

На странице блоктейбл:
<apex:pageBlockTable value="{!Gps}" var="item" id="list">

Но ничего не показывает. Стоит сделать так:

public List<Gp__c> Gps {  
get {
return [мой_запрос];
}
set;
}

То все в таблице видно, но без всякой пагинации есессна, т.е. SOQL запрос рабочий.
Почему (List<Gp__c>)setCon.getRecords() может не возвращать значения? Или все-таки что-то не так делаю, хотя пересмотрел несколько примеров - везде одно и тоже.
Спасибо.

Здравствуйте.
Изучаю систему и делаю задание, нужно сделать пагинацию на странице.
Делал как везде в примерах, через StandartSetController в кастом-контроллере:
[code]
public ApexPages.StandardSetController setCon {
 get {
  if(setCon == null){
   List<Gp__c> g=[мой_запрос];
   setCon = new ApexPages.StandardSetController(g);
   setCon.setPageSize(5);
  }
  return setCon;
 }  
 set;
} 
public List<Gp__c> Gps {  
get {
 return (List<Gp__c>)setCon.getRecords();
} 
set; 
}

[/code]
На странице блоктейбл:
[code]<apex:pageBlockTable value="{!Gps}" var="item" id="list">[/code]

Но ничего не показывает. Стоит сделать так:
[code]public List<Gp__c> Gps {  
get {
 return [мой_запрос];
} 
set; 
}[/code]
То все в таблице видно, но без всякой пагинации есессна, т.е. SOQL запрос рабочий.
Почему (List<Gp__c>)setCon.getRecords() может не возвращать значения? Или все-таки что-то не так делаю, хотя пересмотрел несколько примеров - везде одно и тоже.
Спасибо.

Вот тут когда-то делался пример и он точно рабочий
https://salesforce-developer.ru/paginatsiya-na-visualforce-stranitse-pagination-using-standardsetcontroller

Вижу пару различий. Попробуй перенести в свой пример, может найдешь косяк.

Вот тут когда-то делался пример и он точно рабочий
https://salesforce-developer.ru/paginatsiya-na-visualforce-stranitse-pagination-using-standardsetcontroller

Вижу пару различий. Попробуй перенести в свой пример, может найдешь косяк.

Спасибо за быстрый ответ! В принципе с оглядкой на ваш пример и делал.
Методом тыка выяснил что почему-то один и тот же SOQL-запрос в одном методе класса срабатывает нормально, в другом методе нет. Если убрать WHERE, то поля в таблице появляются, пагинация работает.
Буду разбираться дальше.

Спасибо за быстрый ответ! В принципе с оглядкой на ваш пример и делал.
Методом тыка выяснил что почему-то один и тот же SOQL-запрос в одном методе класса срабатывает нормально, в другом методе нет. Если убрать WHERE, то поля в таблице появляются, пагинация работает. 
Буду разбираться дальше.

Посмотрел статью. Задался вопрос. А что SOQL не может взять из списка столько записей, сколько необходимо?
Дочитал статью. Прочитал про лимиты. Я так понимаю, когда ты пишешь SELECT - лимитов нету. Они появляются когда ты уже получаешь результат запроса.
1. Вводим 3 переменные. Текущая страница, элементов на странице, сколько надо пропустить.
2. Пишем запрос, если есть поля ORDER BY - пишем и их, не проблема. В конце запроса ставим OFFSET для пропуска ненужных элементов, LIMIT для того, чтобы взять ровно столько сколько нужно.
3. Отдаем данные. т.к. результат запроса может быть до 10000 записей, то без установки LIMIT и OFFSET мы можем получить 10000 записей, но реально нам надо только 10 из них. Это лишняя нагрузка на сервер, на канал передачи.... Закидывая лишние фильтры запроса, мы только оттягиваем свой конец. Фильтров может и не быть от слова совсем.

Может я чего не так понимаю, но в SQL всегда делал по такому алгоритму.

Посмотрел статью. Задался вопрос. А что SOQL не может взять из списка столько записей, сколько необходимо?
Дочитал статью. Прочитал про лимиты. Я так понимаю, когда ты пишешь SELECT - лимитов нету. Они появляются когда ты уже получаешь результат запроса.
1. Вводим 3 переменные. Текущая страница, элементов на странице, сколько надо пропустить.
2. Пишем запрос, если есть поля ORDER BY - пишем и их, не проблема. В конце запроса ставим OFFSET для пропуска ненужных элементов, LIMIT для того, чтобы взять ровно столько сколько нужно.
3. Отдаем данные. т.к. результат запроса может быть до 10000 записей, то без установки LIMIT и OFFSET мы можем получить 10000 записей, но реально нам надо только 10 из них. Это лишняя нагрузка на сервер, на канал передачи.... Закидывая лишние фильтры запроса, мы только оттягиваем свой конец. Фильтров может и не быть от слова совсем.

Может я чего не так понимаю, но в SQL всегда делал по такому алгоритму.

vitt
Спасибо за быстрый ответ! В принципе с оглядкой на ваш пример и делал.
Методом тыка выяснил что почему-то один и тот же SOQL-запрос в одном методе класса срабатывает нормально, в другом методе нет. Если убрать WHERE, то поля в таблице появляются, пагинация работает.
Буду разбираться дальше.

Так может в WHERE ошибка синтаксиса. Выложи запрос.

[quote="vitt"]Спасибо за быстрый ответ! В принципе с оглядкой на ваш пример и делал.
Методом тыка выяснил что почему-то один и тот же SOQL-запрос в одном методе класса срабатывает нормально, в другом методе нет. Если убрать WHERE, то поля в таблице появляются, пагинация работает. 
Буду разбираться дальше.[/quote]

Так может в WHERE ошибка синтаксиса. Выложи запрос.