如何在代码中确定当前JSF生命周期阶段

3

我正在使用JSF版本1.2_09-b02-FCS

假设我有一个其他类的内部类TableList

private class TableList extends AbstractList<T> {

    private List<T> list;

    private int size;

    public T get(int i) {
        if (needToUpdateList || currPage != i / pageSize) {
            currPage = i / pageSize;
            list = getDataList(currPage * pageSize, pageSize);
            needToUpdateList = false;
        }
        return list.get(i % pageSize);
    }

    public int size() {
        if (needToUpdateSize) {
            size = getDataSize();
            needToUpdateSize = false;
        }
        return size;
    }
}

在JSF的生命周期阶段中,会调用其get方法。问题是,我不想在渲染响应阶段调用list = getDataList(currPage * pageSize, pageSize);。这可行吗?

1个回答

3

检查FacesContext#getRenderResponse()是否返回true。

if (FacesContext.getCurrentInstance().getRenderResponse()) {
    // We're currently in the render response phase.
}

如果您使用的是JSF 2.0,您不应该使用那个方法,而是使用FacesContext#getCurrentPhaseId(),因为在初始GET请求的渲染响应期间,getRenderResponse()会错误地返回false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接