2015-08-06 3 views
0

Мне нужна помощь в освещении всего dataTable с разбивкой на страницы, как только я закрыл dialog. С текущим кодом после закрытия dialogdataTable будет обновлен, если выбранный элемент находится на первой странице, и я могу увидеть обновления.Как обновить p: dataTable после закрытия диалога в PrimeFaces?

Однако, если я искал конкретный элемент с использованием фильтра, а затем я нажал на значок вида, чтобы просмотреть диалоговое окно, а затем закройте dialog. dataTable не будет обновлен, если я не удалил искомый элемент из фильтра, а затем попытался его снова найти, я найду обновления.

Код страницы является:

<h:form id="Requests"> 
    <p:dataTable id="PendingRequests" 
       var="hr" 
       value="#{hrd.pendingRequests}" 
       paginator="true" 
       rows="15" 
       paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" 
       rowsPerPageTemplate="5,10,15" 
       paginatorPosition="bottom" 
       filteredValue="#{hrd.filteredPendingRequests}"> 

     <p:column headerText="Req. No." sortBy="#{hr.reqNo}" filterMatchMode="contains" filterBy="#{hr.reqNo}"> 
      <h:outputText value="#{hr.reqNo}"/> 
     </p:column> 

     <p:column headerText="Print Count" filterMatchMode="contains" filterBy="#{hr.printCount}"> 
      <h:outputText value="#{hr.printCount}"/> 
     </p:column> 

     <p:column> 
      <f:facet name="header">View</f:facet> 
      <p:commandButton id="submitbutton" 
          update=":Requests:#{hr.dialogueName} " 
          oncomplete="PF('#{hr.certificateDialogue}').show()" 
          title="View"> 

       <f:setPropertyActionListener value="#{hr}" target="#{hrd.selectedRequest}"/> 
      </p:commandButton> 
     </p:column> 
    </p:dataTable> 
</h:form> 

И код dialog является:

<p:dialog id="employmentCertificateDialog" 
      header="Certificate" 
      widgetVar="employmentCertificateDialog" 
      modal="true" 
      showEffect="fade" 
      hideEffect="fade" 
      resizable="true"> 

    <p:ajax event="close" 
      listener="#{hrd.UpdateDatatable}" 
      update=":Requests:PendingRequests"/> 
</p:dialog> 

И метод UpdateDatatable() имеет код:

public void UpdateDatatable(CloseEvent event) { 

    listPendingRequests = new ArrayList<PendingRequests>(); 

    try { 
     //Select Statement 

     while (result.next()) { 
      PendingRequests pendingList = new PendingRequests(); 
      reqNo = result.getString("REQ_SEQ_NO"); 
      printCount = result.getString("DOC_PRINTED_CNT" + 1); 
      pendingList.setReqNo(reqNo); 
      pendingList.setPrintCount(printCount); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

вы, кажется, используете filterValue ... вы также обновляете запись там? Или, может быть, на самом деле не обновлять данные с помощью атрибута update в теге ajax, но предоставить datatable атрибут 'widgetVar = 'dtWidgetVar'' и делать 'onComplete = 'PF (' dtWidgetVar '). Filter()" 'на ajax tagb – Kukeltje

+0

@Kukeltje Да, я буду фильтровать значение, а затем я нажму на значок, чтобы увидеть его. Если я закрою диалог, мне нужно будет обновить этот счетчик, чтобы увеличить его на 1. Я попробую ваше предложение сохранить onComplete в теге ajax при закрытии диалога, и я увижу. Но что означает onComplete = "PF ('dtWidgetVar'). Filter()? – 99maas

+0

@Kukeltje Моя проблема в том, что я хочу обновить dataTable, как только я закрыл открытый диалог – 99maas

ответ

0

добавить widgetvar to dataTable widgetVar="dtWidgetVar"

, а затем:

<p:ajax event="close" listener="#{hrd.UpdateDatatable}" update=":Requests:PendingRequests" onComplete="PF('dtWidgetVar').filter()" /> 
0

Я надеюсь, что это помогает:

<p:dialog id="dialog-test" onHide="refreshTable();"> 
    ... 
</p:dialog> 

в конце вашей страницы:

<p:remoteCommand name="refreshTable" action="#{hrd.UpdateDatatable}" 
       partialSubmit="true" process="@this" update="Requests" /> 

Если вам нужно отправить информацию из диалога в backBean возможно, вам нужно изменить процесс, добавив идентификатор диалога или идентификатор элемента, который вы хотите отправить:

<p:remoteCommand name="refreshTable" action="#{hrd.UpdateDatatable}" 
       partialSubmit="true" process="@this, dialog-test" update="Requests" /> 

Удачи!

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