中的rowsPerPage或页面发生变化时如何更新其他组件

发布于 2024-12-04 15:02:05 字数 10467 浏览 0 评论 0原文

我想更新一个组件,显示与 primefaces 数据表当前页面中显示的信息相关的数据,但我找不到任何有关拦截 ajax 事件的信息,例如 onRowsPerPageChange 或 onPageChanged。

有什么办法可以做到这一点吗?

使用 primefaces 3.0.M3 和 Glassfish 3.1

这是我的表格。我要更新的组件是第一个组件页脚内的另一个数据表:

<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>

I would like to update a component showing data related to the info displayed in the current page of a primefaces dataTable but I couldn't find any info about intercepting ajax events like
onRowsPerPageChange or onPageChanged.

Is there any way to do that?

Using primefaces 3.0.M3 and Glassfish 3.1

Here is my table. The component I want to update is another dataTable inside the footer of the first one:

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

铃予 2024-12-11 15:02:05

侯,

有一个更改页面的事件,请参见这里

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());
    }

你可以看到你在哪个页面以及选择了多少行。当您更改页面或更改显示的行数时,都会触发此事件。

Hou,

there is an event for changing a page, see here

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')"... />
   ...

though I am still looking for an event for onChangeRows

but, my current problem is only storing user choices, in fact that page event solves storing both on what page I am and how many rows are selected. If onPaginate implements in this way:

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());
    }

You can see what page you are on and how many rows are selected. And this event is triggered both when you change a page or change how many rows shown.

酒解孤独 2024-12-11 15:02:05

我的解决方案是使用 Primefaces 5.2.x。

我找到了一种非常简单的方法来实现这一点,我在 udik 解决方案中遇到的问题之一是,当调用 onPaginate() 方法时,它没有最新的选定值。

因此,我所做的就是确保您始终拥有最新值,并且可以将其保存/加载到数据库或 cookie 或其他东西(我们保存到 cookie)。

<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
    }
    .....
}

基本上神奇的事情发生在remoteCommand中,它将在ajax事件之后触发以确保controller.rowsPerPage已正确更新。

My solution is using Primefaces 5.2.x.

I found a pretty easy way to implement this, one of the problems I had with udik's solution was that when the onPaginate() method was called, it didn't have the newest selected value.

So here's what I did to make sure you always had the latest value and could save/load it to the database or a cookie or something (we save to a cookie).

<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}" />

and then our controller looks like this:

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

Basically the magic happens in the remoteCommand, which will fire after the ajax event to insure that controller.rowsPerPage has been properly updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文