【问题标题】:How to jump in Primefaces dataTable to last page from the bean?如何从 bean 跳转到 Primefaces dataTable 到最后一页?
【发布时间】:2016-01-28 10:06:43
【问题描述】:

我的 .xhtml 中有一个如下所示的数据表:

<p:dataTable var="category" value="#{beanView.categories}" paginator="true" rows="5" 
 paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
 rowsPerPageTemplate="5,10" id="categoryDT" styleClass="categoryClass"    
 editable="true" lazy="false" rowKey="#{category.id}">
 <!-- columns -->
<f:facet name="footer">
    <p:commandButton id="btnNewCat" 
      oncomplete="jQuery('.categoryClass').find('span.ui-icon-pencil').last().click();" 
    actionListener="#{beanView.onNewCategory}" 
    update="categoryDT" icon="ui-icon-plus" title="New Category" value="New Category" ></p:commandButton>
</f:facet></p:dataTable>

还有我的豆beanView

public void onNewCategory(final ActionEvent actionEvent) {

    try {
        int rowCount = dataTable.getRowCount();
        int rowsPerPage = dataTable.getRows();
        int lastPage = rowCount / rowsPerPage;
        int rowFirst = (lastPage * rowsPerPage);

        if (rowCount >= rowsPerPage) {
            dataTable.setFirst(rowFirst);
            dataTable.setPageLinks(lastPage + 1);
            dataTable.setRowIndex(rowCount - 1);
        } else {
            ....
        }

        ....
     }
 }

但这实际上不起作用!最后一页不会显示!

是否可以从 bean 中单击我的数据表的最后一页按钮?或者有没有其他方法可以解决!

感谢您的帮助

【问题讨论】:

  • 尝试用这个替换oncomplete:PF('dataTableWV').paginator.setPage(PF('dataTableWV').paginator.cfg.pageCount - 1);
  • 哦!好的!这个有效!但是如何将 : PF('widgetcategoryDT').paginator.setPage 放入 Bean 中??
  • 使用这个:RequestContext.getCurrentInstance().execute("PF('widgetcategoryDT').paginator.setPage ....')");
  • 哦,是的!工作!你能把它作为答案发布吗?所以我可以选择它!?

标签: jquery jsf jsf-2 primefaces datatable


【解决方案1】:

你可以通过commandButton的oncomplete来实现:

<p:commandButton oncomplete="PF('dataTableWV').paginator.setPage(PF('dataTableWV').paginator.cfg.pageCount - 1);"/>

或来自托管 bean:

RequestContext.getCurrentInstance().execute("PF('dataTableWV').paginator.setPage(PF('dataTableWV').paginator.cfg.pageCount - 1);");

注意:dataTableWV 是 dataTable 的 widgetVar。

【讨论】:

    【解决方案2】:

    我只是添加到 Hatem 的答案。

    如果您需要检查以仅在成功后向数据表添加/创建行并且未发生验证错误时执行此操作,您可以使用:

    action="#{myBean.createSelection}"
    oncomplete="if ( !args.validationFailed &amp;&amp; args.created ) { PF('myDataTable').paginator.setPage(PF('myDataTable').paginator.cfg.pageCount - 1); }" />
    

    oncomplete 方法具有参数xhrstatusargs,控制器可以使用这些参数返回实际发生的情况。

    在上述情况下,我们将一些实体添加到数据表中,并且如果验证没有失败并且创建了新实体而不是更新或删除时,我们只想分页到最后一个。

    在您的控制器中,您可以/应该这样做:

        public void createSelection()
        {
            T selectedEntity = getSelectedEntity();
            
            T persistedEntity = null;
            
            try
            {
                persistedEntity = getEntityService().create( selectedEntity );
            }
            catch ( CreateException e )
            {
                ...
    
                return;
            }
            
            ...            
            
            PrimeFaces.current().ajax().addCallbackParam( "created", Boolean.TRUE );            
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多