2012-10-06 95 views
1

我有一個請求作用域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; 
} 

這正常原因,但該方法是多次調用每個#{bean.data(obj)}因爲JSF生命週期階段。

我只想爲#{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 a的範圍很寬嗎?

回答

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