0

私は自分のアプリケーションで使用JSF 1.2しています。私のアプリケーションページのほとんどはh:datatable. データテーブルに関するすべてを説明するこの素晴らしい記事に出くわしました。HtmlDataTable上記の記事で示したように、テーブルをセッション スコープの Beanにバインドして使用することで、データ テーブルのページネーションを実装しました。

今、私はJSF 2.0バージョンに移行しています。ほとんどのアプリケーション ページが互いに独立しているため、 sessionscopedBean をに変換したいと考えていました。viewscoped

豆について説明しているこの記事に出くわしました。データテーブルの属性をViewscoped使用できないことを示しています。bindingまた、 を使用しDatamodelます。

Datamodeland viewscopedBeanを使用してデータ化可能なページネーションを実装する方法に今、私は感銘を受けました。

私はページネーションのために次の方法を持っています

public String pageFirst() {
        dataTable.setFirst(0);
        return "";
    }

    public String pagePrevious() {
        dataTable.setFirst(dataTable.getFirst() - dataTable.getRows());
        return "";
    }

    public String pageNext() {
        dataTable.setFirst(dataTable.getFirst() + dataTable.getRows());
        return "";
    }

    public String pageLast() {
        try {
        int count = dataTable.getRowCount();
        int rows = dataTable.getRows();
        LOGGER.info("rowcount:" + count);
        LOGGER.info("rows:" + rows);
        dataTable.setFirst(count - ((count % rows != 0) ? count % rows : rows));
        }catch(ArithmeticException e){
            LOGGER.info("no rows to display: ",e);
        }
        return "";
    }

そして、ビューでは、私はそれらをこのように使用しています

<h:commandButton value="#{msgs.footerbutton1}"
                 action="#{bean.pageFirst}"
                 disabled="#{bean.dataTable.first == 0}" />
<h:commandButton value="#{msgs.footerbutton2}"
             action="#{bean.pagePrevious}"
             disabled="#{bean.dataTable.first == 0}" />
<h:commandButton value="#{msgs.footerbutton3}"
             action="#{bean.pageNext}"
             disabled="#{bean.dataTable.first + bean.dataTable.rows
                             >= bean.dataTable.rowCount}" />
<h:commandButton value="#{msgs.footerbutton4}"
              action="#{bean.pageLast}"
              disabled="#{bean.dataTable.first + bean.dataTable.rows
                           >= bean.dataTable.rowCount}" />

助けてください。

4

2 に答える 2

1

次のようにバインドされているプロパティdataTable.setFirst(...)dataTable.getRows()byprivate int firstおよびプロパティを置き換えますprivate int rows

<h:dataTable ... first="#{bean.first}" rows="#{bean.rows}">
于 2012-10-07T01:02:16.307 に答える
0

遅延読み込みを含む多くの機能を備えた、すぐに使える非常に優れたデータテーブルを備えたprimefaces dataableを使用する必要があると思います。または、 richfacesまたはその他のコンポーネントスイートを使用することもできます。もちろん、onw jsf ページネーションを作成することもできますが、完成したものを作成するのに多くの時間を費やすことになると思います。

于 2012-10-06T13:26:07.740 に答える