我有一个请求范围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是否具有广泛的范围,因为在使用不同参数的视图上多次调用该方法?
答案 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;
}