我有一個POJO數據控制「WagonDC」下面給出:如何殺死POJO數據控件實例?
package mobile.local;
import java.util.ArrayList;
import java.util.List;
import mobile.WagonEntity;
import oracle.adfmf.java.beans.PropertyChangeSupport;
import oracle.adfmf.java.beans.ProviderChangeListener;
import oracle.adfmf.java.beans.ProviderChangeSupport;
public class WagonDC {
private WagonEntity wagonEntity;
private List wagonListDetails = new ArrayList();
private WagonlistAdapter adapter = new WagonlistAdapter();
public WagonDC() {
super();
System.out.println("----WAGON DC CALLED-----");
findAll();
}
protected transient ProviderChangeSupport providerChangeSupport = new ProviderChangeSupport(this);
public void addProviderChangeListener(ProviderChangeListener l) {
providerChangeSupport.addProviderChangeListener(l);
}
public void removeProviderChangeListener(ProviderChangeListener l) {
providerChangeSupport.removeProviderChangeListener(l);
}
public void setWagonEntity(WagonEntity wagonEntity) {
this.wagonEntity = wagonEntity;
}
public WagonEntity getWagonEntity() {
return wagonEntity;
}
public WagonEntity[] getWagonListDetails() {
System.out.println("-------getWagonListDetails called-------");
return (WagonEntity[]) wagonListDetails.toArray(new WagonEntity[wagonListDetails.size()]);
}
public void findAll() {
wagonListDetails = adapter.findAllwagonList();
if(wagonListDetails.size()>0){
providerChangeSupport.fireProviderRefresh("wagonListDetails");
}
}
public void refresh(){
System.out.println("--Refreshing--");
findAll();
System.out.println("--Refreshed--");
}
public void update(WagonEntity wagonEntity) {
boolean success = adapter.updateWagon(wagonEntity);
if (success) {
int index = wagonListDetails.indexOf(wagonEntity);
wagonListDetails.set(index, wagonEntity);
}
}
}
這個數據控制稱爲第一次當上貨車房源頁面加載綁定,它看起來是這樣的:
<amx:listView var="row" value="#{bindings.wagonListDetails1.collectionModel}"
fetchSize="#{bindings.wagonListDetails1.rangeSize}"
selectedRowKeys="#{bindings.wagonListDetails1.collectionModel.selectedRow}"
initialScrollRowKeys="#{bindings.wagonListDetails1.collectionModel.selectedRow}"
selectionListener="#{bindings.wagonListDetails1.collectionModel.makeCurrent}"
showMoreStrategy="autoScroll" bufferStrategy="viewport" id="lv2" >
<amx:listItem id="li2">
<amx:outputText value="Wagon No: #{row.WAGON_NO}" id="ot19"/>
<amx:outputText value="Product: #{row.PRD_DESC}" id="ot20"/>
</amx:listItem>
</amx:listView>
問題是第二次加載頁面時,此時不調用POJO數據控件方法「getWagonListDetails()」。看起來POJO DC首次在綁定上下文中調用POJO時創建了一個POJO的實例,第二次顯示的是先前創建的實例或設備緩存中的數據。但是,如果我有一些更新的數據,那麼它不會顯示在頁面上。所以我有兩個問題:
- 有沒有辦法殺死以前的實例加載另一個新的實例?
- POJO是否將數據存儲在緩存中,因爲如果關閉我的應用程序並重新打開,那麼我可以看到更新的值?
- 如果數據存儲在緩存中,那麼是否有任何配置設置來防止Oracle MAF中的數據緩存?
注意:我可以通過調用POJO中定義的「refresh()」方法來手動刷新頁面數據。