簡體   English   中英

將頁面事件與PrimeFaces中的p:dataList一起使用

[英]Using the page event with p:dataList in PrimeFaces

<p:dataList>是否支持page事件? 我試圖以以下方式使用page事件(在瀏覽頁面時使用<pe:blockUI>阻止<p:dataList> )。

<pe:blockUI target="dataList" widgetVar="blockDataListUIWidget">
    <h:panelGrid columns="2">
        <h:graphicImage library="default" name="images/ajax-loader1.gif"/>
        <h:outputText value="Fetching..." class="block-ui-text"/>
    </h:panelGrid>
</pe:blockUI>

<p:dataList id="dataList"
            var="orderRow"
            value="#{orderDetailsManagedBean}"
            first="0"
            rows="1"
            paginator="true"
            paginatorAlwaysVisible="false"
            type="definition" lazy="true"
            emptyMessage="Message">

    <p:ajax event="page"
            onstart="PF('blockDataListUIWidget').block()" 
            oncomplete="PF('blockDataListUIWidget').unblock()"
            process="@this"
            update="@none"/>

            ...

</p:dataList>

這不再起作用。 頁面只是空白,沒有錯誤。 <p:dataList>似乎不支持事件。

無論如何,可以在<p:dataList>模擬這種情況嗎?

源代碼中可以看出, dataList不支持page事件,而dataGrid 支持它

解決方案將是猴子修補,因為我們無法控制重寫原始JS文件,您可以在處理分頁之前和之后掛接事件,所有這些都可以通過javascript進行。

這是一個示例:假設您的dataList widgetVardataListWV

//making sure the widgetVar is ready to be used    
setTimeout(dataListPaginationExtraEvents, 1000);    

function dataListPaginationExtraEvents() {
   var odlHandlePagination = PF('dataListWV').handlePagination;

   PF('dataListWV').handlePagination = function(newState) {
      //before
      console.log('start fetch');
      //calling original pagination 
      odlHandlePagination.apply(this, [newState]);
      //after
      console.log('end fetch');
   }
 }

從PrimeFaces 5.3 final(社區版本)開始, page事件在<p:dataList>受支持。

下圖取自PrimeFaces用戶指南5.3 (第146頁)。

在此處輸入圖片說明

在先前的指南中沒有提及Ajax行為事件。

問題中提到的page事件在PrimeFaces 5.3 final(社區發行版)中可以完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM