2011-09-14 13 views
0

primefaces dataTableの現在のページに表示される情報に関連するデータを表示するコンポーネントを更新したいのですが、Ajaxイベントのインターセプトに関する情報は見つかりませんでした onRowsPerPageChangeまたはonPageChanged。rowsPerPageまたはページが変更されたときに他のコンポーネントを更新する方法<p:dataTable>

これを行う方法はありますか? primefaces 3.0.M3とGlassFish 3.1

を使用して

は、ここに私のテーブルです。私は更新したいコンポーネントは最初のもののフッター内の別のdataTableです:

<p:dataTable id="timbrature_dt" 
           value="#{timbratureMBean.dataModel}" 
           paginator="true" 
           rows="12" 
           lazy="true" 
           paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" 
           rowsPerPageTemplate="6,12,24" 
           currentPageReportTemplate="#{msgs.pagina} {currentPage} #{msgs.of} {totalPages}" 
           var="tdett" 
           widgetVar="ttable" 
           selection="#{timbratureMBean.selezione}" 
           selectionMode="single"> 
         <p:ajax event="rowSelect" listener="#{timbratureMBean.onRowSelect}" 
           update="display :timbrature_dt:giustificativi_dt" 
           oncomplete="timbDialog.show()" /> 
         <f:facet name="header"> 
          <h:panelGrid columns="1" columnClasses="columnclass-noborders"> 
           <p:outputPanel> 
            <h:outputText value="#{msgs.dal}: " /> 
            <p:calendar value="#{timbratureMBean.daData}" 
               pattern="dd/MM/yyyy" 
               locale="it" 
               showButtonPanel="true" 
               navigator="true" 
               mindate="01/01/2003" 
               maxdate="#{timbratureMBean.oggi}"> 
             <p:ajax event="dateSelect" listener="#{timbratureMBean.dataChangeListener}" 
               update="timbrature_dt :timbrature_dt:giustificativi_dt" /> 
            </p:calendar> 
            <h:outputText value=" #{msgs.al}: " /> 
            <p:calendar value="#{timbratureMBean.aData}" 
               pattern="dd/MM/yyyy" 
               locale="it" 
               showButtonPanel="true" 
               navigator="true" 
               mindate="01/01/2003" 
               maxdate="#{timbratureMBean.oggi}"> 
             <p:ajax event="dateSelect" listener="#{timbratureMBean.dataChangeListener}" 
               update="timbrature_dt :timbrature_dt:giustificativi_dt" /> 
            </p:calendar> 
           </p:outputPanel> 
           <h:outputText value="#{msgs.timbrature}"/> 
          </h:panelGrid> 

         </f:facet> 
         <p:column> 
          <f:facet name="header"> 
           #{msgs.data_comp} 
          </f:facet> 
          <amp:outputData value="#{tdett.sDtComp}"/> 
         </p:column> 

         <p:column> 
          <f:facet name="header"> 
           #{msgs.data_reale} 
          </f:facet> 
          <amp:outputData value="#{tdett.sDtTimb}"/> 
         </p:column> 

         <p:column> 
          <f:facet name="header"> 
           #{msgs.terminale} 
          </f:facet> 
          <h:outputText value="#{tdett.nrTer}"/> 
         </p:column> 

         <p:column filterBy="#{tdett.eU}" filterOptions="#{timbratureMBean.euOptionList}"> 
          <f:facet name="header"> 
           #{msgs.verso} 
          </f:facet> 
          <h:panelGroup> 
           <h:outputText value="#{msgs.entrata}" rendered="#{tdett.eU == 'E'}"/> 
           <h:outputText value="#{msgs.uscita}" rendered="#{tdett.eU == 'U'}"/> 
          </h:panelGroup> 
         </p:column> 

         <p:column> 
          <f:facet name="header"> 
           #{msgs.ora_valida} 
          </f:facet> 
          <h:outputText value="#{tdett.oraValida}"/> 
         </p:column> 

         <p:column> 
          <f:facet name="header"> 
           #{msgs.ora_reale} 
          </f:facet> 
          <h:outputText value="#{tdett.oraReale}"/> 
         </p:column> 

         <f:facet name="footer"> 
          <p:dataTable id="giustificativi_dt" 
             value="#{timbratureMBean.dataList}" 
             var="gius" 
             widgetVar="gtable"> 
           <f:facet name="header"> 
            <h:panelGrid columns="1" columnClasses="columnclass-noborders"> 
             <h:outputText value="#{msgs.giustificativi}"/> 
            </h:panelGrid> 

           </f:facet> 
           <p:column> 
            <f:facet name="header"> 
             #{msgs.voce} 
            </f:facet> 
            <h:outputText value="#{gius.voce}"/> 
           </p:column> 

           <p:column> 
            <f:facet name="header"> 
             #{msgs.dal} 
            </f:facet> 
            <amp:outputData value="#{gius.sDtIGius}"/> 
           </p:column> 

           <p:column> 
            <f:facet name="header"> 
             #{msgs.al} 
            </f:facet> 
            <amp:outputData value="#{gius.sDtFGius}"/> 
           </p:column> 

           <p:column> 
            <f:facet name="header"> 
             #{msgs.nr_giorni} 
            </f:facet> 
            <h:outputText value="#{gius.nrGiorni}"/> 
           </p:column> 
           <p:column> 
            <f:facet name="header"> 
             #{msgs.ora_inizio} 
            </f:facet> 
            <amp:outputNvl value="#{gius.oraIGius}" nullval="-"/> 
           </p:column> 
           <p:column> 
            <f:facet name="header"> 
             #{msgs.ora_fine} 
            </f:facet> 
            <amp:outputNvl value="#{gius.oraFGius}" nullval="-"/> 

           </p:column> 
           <p:column> 
            <f:facet name="header"> 
             #{msgs.nr_ore} 
            </f:facet> 
            <amp:outputNvl value="#{gius.nrOre}" nullval="-"/> 
           </p:column> 
           <p:column> 
            <f:facet name="header"> 
             #{msgs.nr_minuti} 
            </f:facet> 
            <amp:outputNvl value="#{gius.nrMinuti}" nullval="-"/> 
           </p:column> 
          </p:dataTable> 
         </f:facet> 
        </p:dataTable> 

        <p:dialog header="Info" widgetVar="timbDialog" resizable="false" 
           width="200" showEffect="clip" hideEffect="clip"> 

         <h:panelGrid id="display" columns="2" cellpadding="4"> 

          <h:outputText value="Data:" style="font-weight: bold"/> 
          <amp:outputData value="#{timbratureMBean.selezione.sDtComp}" /> 

          <h:outputText value="Pausa pranzo ridotta: " style="font-weight: bold"/> 
          <h:outputText value="#{timbratureMBean.gestPausaPranzo}" /> 

          <h:outputText value="Timbratura non allineata: " style="font-weight: bold"/> 
          <h:outputText value="#{timbratureMBean.timbNonAllineate}" /> 

         </h:panelGrid> 
        </p:dialog> 
+0

また、これら2つのイベントのリスナーが役に立ちます。 – maxqua72

答えて

3

侯、ページを変更するためのイベントが

あり、

http://cagataycivici.wordpress.com/2011/06/10/datatable-hooks/

<p:datatable paginator="true" rows="10" value="#{bean.items}" var="item"> 
    <p:ajax event="page" listener="#{bean.onPaginate}" update="othercomponents" oncomplete="alert('done')"... /> 
    ... 
こちらをご覧ください

まだ私はonChangeRowsのイベントを探していますが、

しかし、私の現在の問題は、実際にはページ・イベントが私のページと選択された行の数の両方を保存するという問題を解決するだけで、ユーザーの選択肢を格納することにあります。このようにもしonPaginate実装:

public void onPaginate(PageEvent event){ 
     logger.info("I am on page:"+event.getPage()); 
     logger.info("Rows per page set:"+((org.primefaces.component.datatable.DataTable)event.getSource()).getRows()); 
    } 

あなたがオンになっているとどのように多くの行選択されているどのようなページを参照してくださいすることができます。このイベントは、ページを変更したり、表示されている行数を変更した場合にも発生します。

2

私の解決策は、Primefaces 5.2.xを使用しています。

私はudikのソリューションで問題を抱えていましたが、onPaginate()メソッドが呼び出されたときに最新の値が選択されていないということでした。

これは私があなたが常に最新の値を持っていて、データベースやクッキーなど(クッキーに保存する)に保存/ロードできることを確認するためです。

<p:dataTable 
     ..... 
     paginator="true" 
     paginatorPosition="bottom" 
     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
     currentPageReportTemplate="Total records: {totalRecords}, showing page {currentPage} of {totalPages}" 
     rowsPerPageTemplate="25,50,100" 
     rows="#{controller.rowsPerPage}" 
     ..... 
    > 
     ..... 
     <p:ajax event="page" oncomplete="rowsPerPageUpdate()" /> 
     ..... 
</p:dataTable> 
<p:remoteCommand name="rowsPerPageUpdate" actionListener="#{controller.onPaginate}" /> 

、その後、私たちのコントローラは次のようになります。

@Dependent 
@Named 
public class TableController implements Serializable { 
    private String rowsPerPage = "25"; //default value 
    ..... 
    public void onPaginate() { 
     //save to the cookie 
    } 
    ..... 
} 

基本的に魔法がcontroller.rowsPerPageが正しく更新されていることを保証するために、AJAXイベントの後に起動しますremoteCommand、で行われます。

+0

人がレイジーモデルを使い始めたばかりの人。これらすべての回避策よりずっと簡単です – Kukeltje

+0

ライブスクロールまたはLazyDataModelを意味しますか?これはLazyDataModelにはまだ関連しており、顧客はライブスクロールタイプの読み込みの巨大なファンではありません。 –

関連する問題