2015-12-02 40 views
1

我有一個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的實例,第二次顯示的是先前創建的實例或設備緩存中的數據。但是,如果我有一些更新的數據,那麼它不會顯示在頁面上。所以我有兩個問題:

  1. 有沒有辦法殺死以前的實例加載另一個新的實例?
  2. POJO是否將數據存儲在緩存中,因爲如果關閉我的應用程序並重新打開,那麼我可以看到更新的值?
  3. 如果數據存儲在緩存中,那麼是否有任何配置設置來防止Oracle MAF中的數據緩存?

注意:我可以通過調用POJO中定義的「refresh()」方法來手動刷新頁面數據。

回答

2

實際的數據控制的範圍取決於被創建它。 ApplicationController項目中的配置使其具有應用範圍。 Th在ViewController項目中的配置將使其具有Feature的範圍。

回答您的問題:

「有什麼辦法殺死前一個實例加載另一個新的實例?」

不,沒有必要。實際上,您的示例查詢構造函數中的數據。您也可以從外部調用查詢方法。如果數據發生變化,那麼您在更新列表(集合)的方法中調用提供程序更改事件,並且MAF框架將自行識別它必須刷新UI才能顯示數據更改。

「在高速緩存中是否POJO存儲數據,因爲如果我關閉我的應用程序,然後重新打開,然後我可以看到更新後的值?」

如所提到的,該實例的範圍取決於它被配置在哪裏。實例保留信息,直到您更改它或告訴實例不再記住它爲止(通過將列表設置爲空列表)

「如果數據存儲在緩存中,那麼是否存在任何配置設置以防止數據緩存Oracle MAF?「

至於說,你創建了你的POJO類的一個實例。所有狀態都在屬性中(您的案例中的列表)。因此,您可以公開一種方法來對其進行覈對或刷新,然後 - 如果您想在運輸途中執行某些操作,則可以使用例如一個方法調用活動來做你想做的事情。

弗蘭克