gpt4 book ai didi

Java ADF 存储的数据控件值直到下次运行才会显示

转载 作者:行者123 更新时间:2023-12-01 15:00:43 25 4
gpt4 key购买 nike

基本上,我有一个包含许多组件的 JSF 页面,其中包括一个 ADF 表,其中填充了从我的数据控制类中的 getData() 方法返回的数据列表。在表格上方,我尝试根据显示的数据显示一些计算值 - 但字段值未正确显示。

(我使用的是 JDev 11.1.1.5)

数据控制类称为RecentDeals,getData() 方法返回Deal 对象列表,其中包含许多字段(日期、值、名称等)。

RecentDeals 类还包含私有(private)变量来存储要显示在表格上方的计算(平均)值(例如 avgSize、avgTerm、avgRent 等)。在同一个 getData() 方法中,在迭代交易列表以执行所需的计算(并在此过程中存储相应的值)之后,在返回填充表的交易对象列表之前,将使用计算出的平均值更新变量。

以下是代码摘录,供引用:

public class RecentDealsDC {

private Double avgSize;
private Double avgTerm;
private Double avgRent;
...

public RecentDealsDC() {
super();
avgSize = 0.0;
avgTerm = 0.0;
avgRent = 0.0;
...
}

public List<DealDTO> getData(List<String> businessUnits){
List<TransactionDTO> transactions = new ArrayList<TransactionDTO>();
List<DealDTO> deals = new ArrayList<DealDTO>();
TransactionSessionBean transBean = lookupTransactionSessionBean();

Double size = 0.0;
Double term = 0.0;
Double totalBaseRent = 0.0;
...
Integer recordCount = 0;

if (businessUnits != null && !businessUnits.isEmpty()){
transactions = transBean.getDealsData(SystemUtil.getCurrentUser(), businessUnits);

recordCount = transactions.size();

if( recordCount > 0 ){
for (int i=0; i < recordCount; i++){
TransactionDTO transObj = new TransactionDTO();
DealDTO dealObj = new DealDTO();

transObj = transactions.get(i);

// process transaction, execute logic, store deal values

size = size + transObj.getRentableArea();
term = term + transObj.getLeaseTerm();
totalBaseRent = totalBaseRent + (transObj.getRentableArea() * transObj.getBaseRent());
...

deals.add(dealObj);
}
}

avgSize = size / recordCount;
avgTerm = term / recordCount;
avgRent = totalBaseRent / size;
...

}

return deals;
}
}

当我运行 JSF 页面时,它正确显示 Deal 对象列表中的数据,但计算字段仅显示零。当用户选择下一个“条件”来填充表时(从标题中的下拉列表中),计算字段将使用先前存储的值进行更新。因此,换句话说, header 字段显示与前一组数据有关的平均值,并且循环似乎对于每个后续用户选择都会继续 - 因此用户被迫选择另一个值来获取所需的平均值,这显然是 Not Acceptable .

我已在 Debug模式下确认计算正在正确执行,并且在返回列表之前将正确的值存储在私有(private)变量中。

不确定我在这里缺少什么,但我想我需要以某种方式“刷新”outputText 组件以立即显示预期值。这就是我正在研究的内容,但现在有些茫然。

任何建议/方向/想法将不胜感激。

编辑:看起来当我折叠并重新展开它们包含在其中的 panelBox 时,outputText 字段也会更新。所以我想知道是否有某种方法可以让我手动执行相同的更新...

谢谢,卡里姆

最佳答案

我得出的解决方案如下:

修改了 DC 类 getData 方法以返回一个新的 DTO,其中包含原始 List 结果集和我需要显示的 4 个变量。然后,我将返回的 DTO 下面的结果集和变量绑定(bind)到相同的相应组件(ADF 表中的结果集、结果集表上方标题中的 4 个 outputText 字段中的变量)。然后,我向迭代器添加了 Refresh="IfNeeded"属性以进行属性绑定(bind)。

现在,我的 outputText 字段会在结果集更改的同时按预期刷新!

卡里姆

关于Java ADF 存储的数据控件值直到下次运行才会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688060/

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