Richfaces 3如何使datascroller做真正的分页

Cat*_*ish 5 java jsf richfaces jsf-1.2

我正试图弄清楚如何使用richfaces datascroller进行真正的分页.

目前我的查询从表中提取所有数据,我想要它,所以当你单击datascroller的下一个按钮时,它将查询db接下来的20行.

我理解如何编写查询以限制行,但我不知道如何获取datascroller的下一个按钮来调用特定方法.

我看到有很多人在Richfaces论坛上发布了潜在的解决方案,但他们都使用了dataModel.由于我没有使用ORM,我不确定如何将这些解决方案应用到我拥有的东西中.

任何帮助表示赞赏.

<rich:extendedDataTable id="resultsTable" value="#{tableBacking.results}" var="results" sortMode="single" rowKeyVar="row">
    <rich:columns value="#{tableBacking.columns == null ? '' : tableBacking.columns}" var="columns" index="ind" id="column#{ind}" sortBy="#{results[ind].data}" rendered="#{tableBacking.columns != null}">
        <f:facet name="header">
            <h:outputText value="#{columns.columnDescription}" />
        </f:facet>

        <h:outputText value="#{results[ind].data}" />

    </rich:columns>

</rich:extendedDataTable>

<rich:datascroller for="resultsTable" page="#{tableBacking.page}" renderIfSinglePage="false" />
Run Code Online (Sandbox Code Playgroud)

支持豆

public class TableBacking {
    private List<List<TableData>> results = null;
    private int page = 0;

    public int getPage() {
    return page;
    }
    public void setPage(int page) {
    this.page = page;
    }
    public List<List<TableData>> getResults() throws Exception {
    return results;
    }
    public void setResults(List<List<TableData>> results) {
    this.results = results;
    }

    private void getData(String whereClause) {

    try {
    DataDao dd = new DataDao();
    results = dd.getData();    // dd.getData just runs a query on a table and puts the results in a List of lists.
    } catch (Exception e) {}
}
Run Code Online (Sandbox Code Playgroud)

Xtr*_*ica 0

您需要将您的rich:extendedDataTable属性绑定到支持 bean 中的属性。

爪哇

private HtmlExtendedDataTable Table;
//Getter and setter
Run Code Online (Sandbox Code Playgroud)

之后你绑定你的视图

html

<rich:extendedDataTable id="resultsTable" value="#{tableBacking.results}" var="results" sortMode="single" rowKeyVar="row" binding="#{tableBacking.Table}">

RichfacesHtmlExtendedDataTable有一个方法可以检查每页显示的行数,称为getRows()。当bean初始化时,只需加载第一个页面值(您可以仅加载其余页面上元素的id,稍后当您要访问页面时根据id加载它们)。

<rich:datascroller/>还有一个在单击页面按钮时触发的事件,您可以通过以下方式从支持 bean 获取该事件:

html

 <f:facet name="footer">
<rich:datascroller id="ds"
                scrollerListener="#{tableBacking.actionOnPageChange}" />
</f:facet>
Run Code Online (Sandbox Code Playgroud)

爪哇

public String actionOnPageChange(DataScrollerEvent event)

DataScrollerEvent包括用户单击的页面,您可以使用这些页面getNewScrolVal()。发生这种情况时,只需加载表中相应页面的值即可。