6

非常に単純なページングを実装するためにデータ テーブルをラップする複合コンポーネントを作成しています。ajax リクエスト間で状態 (現在のページ番号) を保存する必要があります。

FacesComponent でフィールドを作成しようとしましたが、JSF ライフサイクル中にそれらが消去されることがわかりました。

@FacesComponent(value = "bfTableComponent")
public class BFTableComponent extends UIComponentBase implements NamingContainer {

    private int currentPageNumber;
    ...

どこでもこれを行うための簡潔なガイドが見つからないようです! 複合コンポーネントを作成するときに、リクエスト間の状態をどのように保存しますか?

4

1 に答える 1

11

を使用しStateHelperます。で利用できますUIComponent#getStateHelper()

private enum PropertyKeys {
    currentPageNumber;
}

public void setCurrentPageNumber(int currentPageNumber) {
    getStateHelper().put(PropertyKeys.currentPageNumber, currentPageNumber);
}

public int getCurrentPageNumber() {
    return (int) getStateHelper().eval(PropertyKeys.currentPageNumber, 0);
}

0ゲッターでデフォルト値のを返していることに注意してください。が返されるように、デフォルト値に変更intして削除することをお勧めします。Integernull


具体UINamingContainer的な問題とは関係なく、を実装する代わりに、より簡単にするために拡張することもできますNamingContainergetFamily()このようにして、オーバーライドされたメソッドはすでに正しく実装されているため、省略できますUINamingContainer

于 2012-02-23T03:24:50.483 に答える