2013-05-17 1 views
0

Нужна помощь на правильном пути выбора первую строку primefaces DataTable при обновлении страницы, загрузки, сортировки, выгружаемогоPrimefaces LazyLoading Таблица Выберите Первая строка по умолчанию

<p:dataTable id="clientTable" widgetVar="clientTableVar" 
       var="client" 
       value="#{maintenanceAccountController.clientLazyDataModel}" 
       paginator="true" rows="10" 
       paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {CurrentPageReport}" 
       rowsPerPageTemplate="5,10,20" paginatorPosition="bottom" 
       pageLinks="5" lazy="true" sortBy="#{client.cclnCode}" 
       sortOrder="descending" 
       selection="#{maintenanceAccountController.selectedClient}" 
       selectionMode="single" filterDelay="500"> 

       <p:column id="cclnCodeColumn" headerText="Client Code" 
        sortBy="#{client.cclnCode}" filterBy="#{client.cclnCode}" 
        filterMaxLength="10"> 
        <h:outputText value="#{client.cclnCode}" /> 

        <f:event listener="#{maintenanceAccountController.saveAccount}" 
         type="preRenderView"></f:event> 
       </p:column> 

       <p:column id="cclnNamenColumn" headerText="Client Name" 
        sortBy="#{client.cclnName}" filterBy="#{client.cclnName}" 
        filterMaxLength="50"> 
        <h:outputText value="#{client.cclnName}" /> 
       </p:column> 

      </p:dataTable> 

Я в настоящее время решить эту проблему с помощью этот фрагмент в моем управляемом bean-компоненте работает, он фактически выбирает и выделяет строку.

Это работает, потому что выбранный клиент имеет значение null, когда страница обновляется, а поисковая система, сортировка и фильтрация автоматически задают выбранный клиент равным нулю. Поэтому, когда таблица пытается найти выбранного клиента, выполняется логика if, и я могу выбрать первую строку таблицы.

Но я только что сделал свой приемник сеттером, и выбранная строка не вызывает событие, выбранное в строке (спросит эту проблему в другом вопросе).

public MaintenanceAccountClient getSelectedClient() 
{ 
    if (selectedClient == null) 
    { 
     int count = clientLazyDataModel.getRowCount(); 
     int index = clientLazyDataModel.getRowIndex(); 

     if (index < 0 && count > 0) 
     { 
      clientLazyDataModel.setRowIndex(0); 
      selectedClient = clientLazyDataModel.getRowData(); 
     } 
    } 

    return selectedClient; 
} 

Пожалуйста, обратите внимание, что я использую LazyDataModel поэтому список клиентов, загружаются только в RenderPhase, если я не ошибаюсь.

Я действительно мог бы вам помочь. Образец кода действительно будет оценен.


PrimeFaces 3,5 JSF 2,1

+0

Вы хотите всегда выбрать первую строку таблицы? Используйте клиентскую сторону api таблицы данных Primefaces. Он имеет функцию javascript под названием 'selectRow (r, silent)'. Вы можете присоединить эту функцию к datatable, используя функцию 'on()' jquery для данных datatable events '' 'sort' и' filter'. – Jens

+0

hH спасибо за отзыв, но вопрос выше - это упрощение моей проблемы. Я также хочу установить выбранный атрибут в зависимости от значения базы данных. Таким образом, я действительно ищу проблематичный способ правильного задания значения в формате lansy datatable. –

ответ

1

я сталкиваюсь с таким же вопросом тоже. Я должен выбрать первую строку для каждой страницы. Мое решение было просто

<p:ajax event="rowSelect" listener="#{protoCnt.setAdditionDetail()}" update=":rightTabForm"/> 
 
<p:ajax event="page" oncomplete="myTblWidget.selectRow(0);"/>

У меня есть два события, так что на странице выберите событие = "страница" вызывает в связи с myTblWidget.selectRow (0); rowSelect слушатель называет setAdditionDetail()

public void setAdditionDetail() { 
    if (selected== null) { 
     selected= myLazyModelList.get(0); 
    } 
} 

так он выбирает строку на боб и на стороне клиента