2016-05-20 6 views
0

ExtendedDataModel из Ajax4jsf использует метод, называемый walk, глядя, как это:Где находится SequenceRange из метода walk из метода ExtendedDataModel?

public void walk(FacesContext ctx, DataVisitor dv, Range range, Object argument){} 

Этот метод вызывается несколько раз в моем приложении. Некоторые темы в Интернете, похоже, говорят, что последний определяется rows="x" в xhtml. Однако для меня range всегда определяется как 0 (firstRow) - -1 (getRows).

Так что мне было интересно, где этот range определен, поэтому я могу понять, почему ему передаются неправильные параметры. Отладка и поиск в Google не помогли мне до сих пор.

ответ

0

Диапазон представляет собой видимую часть данных, отображаемых в таблице. Если у вас есть paginator, то paginator отображает, какая страница (= из какой строки, какая строка) представлена.

Проблема может быть в некорректном значении атрибута таблицы данных (например, rows).

Другое место может быть в некорректной реализации модели данных. Объект класса модели данных может использоваться как хранилище для данных, отображаемых в rich:dataTable.

Реальный пример:

public class VSDataModel<RecordType> extends ExtendedDataModel<RecordType> implements Arrangeable { 

    private final FetchList<RecordType> list; 

    @Override 
    public void walk(FacesContext ctx, DataVisitor visitor, Range range, Object obj) { 
     try { 
      int firstRow = ((SequenceRange) range).getFirstRow(); 
      int numberOfRows = ((SequenceRange) range).getRows(); 
      if(list == null) { 
       throw new RuntimeException("Underlying list is null!"); 
      } 
      if(list.getList() == null || firstRow != list.getFirstRow()) { 
       list.fetch(firstRow, numberOfRows); 
      } 
      for (RecordType elem : list.getList()) { 
       visitor.process(ctx, list.getPK(elem), obj); 
      } 
     } catch(Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

Он используется в Java private VSDataModel<Record> dependentList; и HTML <rich:dataTable value="#{bean.dependentList}" rows="#{referenceData.recordsPerPage}">

+0

Спасибо за ваш ответ. Я довольно много экспериментировал и получил все, что было (я отправлю ответ на другой вопрос). Мне все еще интересно, когда метод ходьбы называется точно; Я заметил, что это называется пару раз, но я точно не знаю, когда именно. Не могли бы вы, если знаете, немного разобраться в этом? Я чувствую, что он называется каждый раз, когда нарисован текст, но это не объясняет, почему его называют три раза подряд. – Century

+0

Да, RichFaces называл это каждый раз dataTable повторно нарисован. –

 Смежные вопросы

  • Нет связанных вопросов^_^