【问题标题】:How do you update the page size of a PrimeFaces datatable dynamically?如何动态更新 PrimeFaces 数据表的页面大小?
【发布时间】:2013-09-25 08:48:10
【问题描述】:

我正在尝试在页面上显示数据表之后动态更新 PrimeFaces 数据表的页面大小,但我似乎无法做到这一点。如果这很重要,我正在使用延迟加载的数据表...将 EL 表达式放在行属性中并进行表刷新不起作用,并导致分页器不返回任何数据。

如果这是一个错误以及如何修复它,有什么想法吗?

谢谢

【问题讨论】:

    标签: jsf primefaces datatable


    【解决方案1】:

    你到底想做什么?这对我有用(Mojarra 2.1.26,PrimeFaces 3.5):

    @ManagedBean
    @ViewScoped
    public class Bean {
    
        public class Item {
    
            private String name;
    
            public Item(String name) {
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }
    
        private List<Item> items;
    
        public Bean() {
            Item item1 = new Item("item1");
            Item item2 = new Item("item2");
            items = Arrays.asList(item1, item2);
        }
    
        public List<Item> getItems() {
            return items;
        }
    
        private int tableSize = 1;
    
        public int getTableSize() {
            return tableSize;
        }
    
        public void actionSwitchSize() {
            tableSize = tableSize == 1 ? 2 : 1;
        }
    
    }
    
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui">
    <h:head />
    <h:body>
        <h:form>
            <p:dataTable id="table" var="item" value="#{bean.items}"
                rows="#{bean.tableSize}" paginator="true">
    
                <p:column>
                        #{item.name}
                    </p:column>
    
            </p:dataTable>
            <p:commandButton value="switch size" action="#{bean.actionSwitchSize}"
                update="table" />
        </h:form>
    </h:body>
    </html>
    

    【讨论】:

      【解决方案2】:

      您无需刷新或更新数据表。在&lt;p:dataTable&gt;rowsPerPageTemplate 属性中使用EL 表达式,加载数据表后只需更改行数。

      <p:dataTable value="#{managedBean.users}" var="user" lazy="true" paginator="true" rows="10" rowsPerPageTemplate="10,25 #{fn:length(managedBean.users)}">
      

      并在页面中包含此xmlns:fn="http://java.sun.com/jsp/jstl/functions"

      【讨论】:

      • 我会接受这个答案,因为它最接近解决方案。我不得不从 JS 调用 datatable.paginator.setRowsPerPage() 来做我想做的事,就像你说的不需要更新。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2016-09-15
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多