gpt4 book ai didi

java - 如何杀死POJO数据控件实例?

转载 作者:行者123 更新时间:2023-11-30 03:08:59 25 4
gpt4 key购买 nike

我有一个 pojo 数据控件“WagonDC”,如下所示:

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

当加载货车列表页面上的绑定(bind)时,首次调用此数据控件,如下所示:

<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 第一次在绑定(bind)上下文中调用它时创建了一个 POJO 实例,第二次它显示来自先前创建的实例或设备缓存的数据。但如果我有一些更新的数据,那么它不会显示在页面上。所以我有两个问题:

  1. 有什么办法可以杀死以前的实例来加载另一个新实例吗?
  2. POJO 是否将数据存储在缓存中,因为如果我关闭应用程序并重新打开,我就可以看到更新的值?
  3. 如果数据存储在缓存中,那么是否有任何配置设置可以阻止 Oracle MAF 中的数据缓存?

注意:我可以通过调用 POJO 中定义的“refresh()”方法来手动刷新页面数据。

最佳答案

实际上数据控件的范围取决于它的创建位置。 ApplicationController项目中的配置使其具有了适用范围。 ViewController 项目中的配置将使其具有功能范围。

回答您的问题:

“有什么方法可以杀死以前的实例来加载另一个新实例吗?”

不,也没有必要。实际上,您的示例查询构造函数中的数据。您也可以从外部调用查询方法。如果数据发生变化,那么您可以在更新列表(集合)的方法中调用提供者更改事件,MAF 框架将认识到它必须刷新 UI 以显示数据更改。

“POJO 是否将数据存储在缓存中,因为如果我关闭应用程序并重新打开,我就可以看到更新的值?”

如上所述,实例的范围取决于它的配置位置。实例会保留该信息,直到您更改它或告诉实例不再记住它(通过将列表设置为空列表)

“如果数据存储在缓存中,那么是否有任何配置设置可以阻止 Oracle MAF 中的数据缓存?”

如上所述,它是您创建的 POJO 类的一个实例。所有状态都保存在属性中(您的情况下的列表)。因此,您可以公开一个方法来核对或刷新它,然后 - 如果您想在运输途中做某事 - 您可以使用例如方法调用 Activity 来执行您希望它执行的操作。

弗兰克

关于java - 如何杀死POJO数据控件实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com