【问题标题】:Display all rows in tomahawk paginated, sortable datatable显示战斧分页、可排序数据表中的所有行
【发布时间】:2011-03-24 15:06:08
【问题描述】:

我正在尝试使用 MyFaces 创建一个分页、可排序的数据表。排序工作正常;我可以单击列标题,它会根据列对数据进行排序。分页在大多数情况下也可以正常工作。数据表将使用每页的一些项目适当地拆分自身。此外,我希望用户能够更改每页显示的项目数。同样,这似乎一直有效,直到我希望所有项目都显示在一个页面上。

根据这个reference(也叫here),如果你将t:datatable的“rows”属性设置为“0”,它将显示表格中剩余的行。但是,当我尝试这个时,我得到一个包含此消息的异常:

javax.faces.FacesException - You need to set a value to the 'rows' attribute of component 'myComponent'

我正在尝试使用支持 bean 中的属性设置每页的项目数。我的 t:datatable 看起来像这样:

<t:dataTable id="myComponent" var="cur"
    value="#{backingBean.list}" sortAscending="#{backingBean.ascending}"
    sortColumn="#{backingBean.sortColumn}" sortable="true"
    styleClass="myClass" rowClasses="oddRow,evenRow"
    rows="#{backingBean.itemsPerPage}" preserveDataModel="false">
    <!-- data here -->
</t:datatable>

后来,我有一个t:dataScroller来控制分页:

<t:dataScroller id="pageNavigation" for="myComponent"
    paginatorActiveColumnStyle="font-weight:bold;"
    renderFacetsIfSinglePage="false" 
    binding="#{backingBean.scroller}" 
    paginator="true" >
    <!-- facets here -->
</t:dataScroller>

然后,我有一个 h:selectOneMenu 来选择每页的项目数

<h:selectOneMenu id="myScroller"
    value="#{backingBean.itemsPerPage}"
    required="true" onchange="this.form.submit();"
    valueChangeListener="#{backingBean.updateItemsPerPage}">
    <f:selectItems value="#{backingBean.itemsPerPageArray}" />
</h:selectOneMenu>

我的 backing bean 看起来像这样:

public class BackingBean {

    private boolean ascending;
    private Long itemsPerPage;
    private String sortColumn;
    private ArrayList<SelectItem> itemsPerPageArray;
    private ArrayList<SomeObject> list;  // data for table
    private HtmlDataScroller scroller;

    // constructors, getters, setters, and other stuff here

    public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) {
        itemsPerPage = (Long) valueChangeEvent.getNewValue();
        resetScrollerIndex();
    }

    private void resetScrollerIndex() {
        if (scroller!=null && scroller.isPaginator())
            scroller.getUIData().setFirst(0);
    }

    // called in constructor
    private void constructItemsPerPageArray() {
        itemsPerPageArray = new ArrayList<SelectItem>();
        itemsPerPageArray.add(new SelectItem(new Long(10), "10"));
        itemsPerPageArray.add(new SelectItem(new Long(50), "50"));
        itemsPerPageArray.add(new SelectItem(new Long(100), "100"));
        itemsPerPageArray.add(new SelectItem(new Long(0), "All"));
    }
}

总而言之,当我从 h:selectOneMenu 中选择“全部”项时,我得到了上面提到的异常。希望我已经包含了适当的详细信息。谢谢!

【问题讨论】:

    标签: jsf datatable myfaces tomahawk


    【解决方案1】:

    好吧,我想我找到了答案……

    如果我从 updateItemsPerPage 方法中删除第一行,问题就解决了。该方法现在看起来像:

    public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) {
        resetScrollerIndex();
    }
    

    它以为我已经尝试过了……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多