【问题标题】:Request scope bean and lifecycle lazy loading请求范围 bean 和生命周期延迟加载
【发布时间】:2023-03-03 13:40:01
【问题描述】:

我有一个请求范围 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;
}

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

【问题讨论】:

    标签: jsf request lazy-loading managed-bean


    【解决方案1】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多