2017-02-06 11 views
-1

У меня есть список с очень данными. Я хочу показать данные в таблице данных Primeface с ленивой способностью загрузки. теперь я показываю данные нормальные в таблице данных, но это медленно. Как использовать ленивую способность загрузки?Использовать Список для источника в datatable с lazyLoading

XHTML Файл:

<ui:composition template="template.xhtml"> 
<ui:define name="content"> 
    <p:panel id="pnlLogInformationPage"> 
     <h:form id="logInformation"> 
      <div class="contentContainer-full-left"> 
       <p:dataTable var="log" value="#{logInformationMB.logInformationList}" id="logTable" 
        width="100%" liveResize="true"> 
        <p:column headerText="ID" sortBy="Id"> 
         <h:outputText value="#{logInformation.Id}" /> 
        </p:column> 
        <p:column headerText="Name" sortBy="Name"> 
         <h:outputText value="#{logInformation.Name}" /> 
        </p:column> 
       </p:dataTable> 
      </div> 
     </h:form> 
    </p:panel> 
</ui:define> 

ManageBean Файл:

@ManagedBean(name = "logInformationMB") 
@ViewScoped 
public class LogManagedBean implements Serializable { 
    @PostConstruct 
    public void initComponents() { 
     loadLogInformation(); 
    } 
    public List<LogInformationDTO> getLogInformationList() { 
     return logInformationList; 
    } 
    public void setLogInformationList(final List<LogInformationDTO> pLogInformationList) { 
     logInformationList = pLogInformationList; 
    } 
    public void loadLoagInformation(final ComponentSystemEvent event) { 
     setLogLInformationlist(getLogInformationList(); 
    } 
    public void loadInformationProtokolle() { 
     loadInformationProtokolle(null); 
    } 
    public List<LogInformationDTO> getLogInformation() { 
     final List<LogInformationDTO> lcResult = new ArrayList<LogInformationDTO>(); 
     .... 
     return lcResult; 
    } 
} 
+0

Начало глядя на PrimeFaces витрина и документация. Затем выполните поиск в Google, Stackoverflow и т. Д., И когда у вас возникла проблема с кодированием, задайте более конкретный вопрос. Этот слишком общий/широкий/rtfm ... – Kukeltje

ответ

1

В соответствии с вашим кодом, вы не использовали lazyloading. вы просто получите все свои данные. Это будет слишком медленно, когда ваши данные будут слишком большими.

Смотрите мои шаги ниже:

- Вместо того, чтобы использовать # {logInformationMB.logInformationList}, вам нужно создать новый класс, который расширить LazyDataModel класса и создать сервис, который может получить данные постранично ,

public class LogInformationDataModel extends LazyDataModel<LogInformationDTO> { 
      private List<LogInformationDTO> logInformationList; 
      private LogInformationService logInformationService = new LogInformationService(); 

      @Override 
      public List<LogInformationDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { 
       // TODO implement sort 

       setRowCount(logInformationService.count(filters));     
       logInformationList = logInformationService.list(first/pageSize, pageSize, sortField, sort, filters); 
       return logInformationList; 
      } 

      @Override 
      public LogInformationDTO getRowData(String rowKey) { 
       for(LogInformationDTO logInformation : logInformationList) { 
        if(logInformation.getId().equals(rowKey)) 
         return logInformation; 
       } 
       return null; 
      } 

      @Override 
      public Object getRowKey(LogInformationDTO logInformation) { 
       return logInformation.getId(); 
      } 
    } 

- Регистрация модели данных в вашем МЕНЕДЖЕРЕ боба

@ManagedBean(name = "logInformationMB") 
    @ViewScoped 
    public class LogManagedBean implements Serializable { 

     private LogInformationDataModel dataModel = new LogInformationDataModel(); 

     public LogInformationDataModel getDataModel() { 
      return dataModel; 
     } 

    } 

- Добавить ленивый attribe (ленивых = "истинные") к вашему р: DataTable и с помощью разбиения на страницы

<p:dataTable var="log" value="#{logInformationMB.dataModel}" var="logInformation" id="logTable" 
     width="100%" 
     lazy="true" 
     paginator="true" 
     paginatorPosition="bottom" 
     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
     rowsPerPageTemplate="10,50,100" 
     > 
     <p:column headerText="ID" sortBy="Id"> 
      <h:outputText value="#{logInformation.Id}" /> 
     </p:column> 
     <p:column headerText="Name" sortBy="Name"> 
      <h:outputText value="#{logInformation.Name}" /> 
     </p:column> 
    </p:dataTable> 

Надеюсь, мой ответ может решить вашу проблему.

Ниже ссылка, вы можете проверить:

Primefaces lazydatamodel

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

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