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在 getter 中返回默认值。您可能想要更改intInteger删除默认值,以便null返回。


与具体问题无关,为了更简单,您也可以扩展UINamingContainer而不是实现NamingContainer. 这样你就可以省略被覆盖的getFamily()方法,因为它已经被正确实现了UINamingContainer

于 2012-02-23T03:24:50.483 回答