请求范围bean和生命周期延迟加载

时间:2012-10-06 12:33:31

标签: jsf request lazy-loading managed-bean

我有一个请求范围bean,其中包含一个检索某些数据以供显示的方法 该方法具有多个参数,因此可以在不同的场合调用它,也可以在同一视图中调用。

JSF:

<ui:repeat value="#{bean.data('foo')}"/>
<ui:repeat value="#{bean.data('bar')}"/>

豆:

public Object[] doSomething(Object arg)
{
    Object[] data = //hit database or remote server to retrieve data;
    return data;
}

这可以解决问题,但由于jsf生命周期阶段,每个#{bean.data(obj)}的方法多次调用

我只想在每次使用#{bean.data(obj)}时点击一次数据库。

我尝试使用以下代码进行延迟加载:不起作用:现在我的jsf页面上没有显示任何数据。

private Object[] data;

public Object[] doSomething(Object arg)
{
    if (this.data == null)
        this.data = //hit database or remote server to retrieve data;
    return this.data;
}

viewcope是否具有广泛的范围,因为在使用不同参数的视图上多次调用该方法?

1 个答案:

答案 0 :(得分:2)

Map中抓住它。

private Map<Object, Object[]> datas = new HashMap<Object, Object[]>();

public Object[] getData(Object arg) {
    Object[] data = datas.get(arg);

    if (data == null) {
        data = //hit database or remote server to retrieve data;
        datas.put(arg, data);
    }

    return data;
}