基本上,我有一个 JSF 页面,其中包含许多组件,包括一个 ADF 表,其中填充了从我的数据控件类中的 getData() 方法返回的数据列表。在表格上方,我试图从显示的数据中显示一些计算值 - 但字段值未正确显示。
(我使用的是 JDev 11.1.1.5)
数据控件类称为RecentDeals,getData() 方法返回一个包含许多字段(日期、值、名称等)的Deal 对象列表。
RecentDeals 类还包含私有变量,用于存储要显示在表格上方的计算(平均值)值(例如,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 对象列表的数据,但计算的字段只显示为零。当用户选择下一个“标准”来填充表格时(从标题中的下拉列表中),计算的字段随后将使用先前存储的值进行更新。因此,换句话说,标题字段显示与前一组数据有关的平均值,并且对于每个后续用户选择,循环似乎都会继续 - 因此用户被迫选择另一个值以获得所需的平均值,这显然是不可接受的.
我已在调试模式下确认计算正在正确执行,并且在返回 List 之前将正确的值存储在私有变量中。
不确定我在这里缺少什么,但我想我需要以某种方式“刷新” outputText 组件以立即显示预期值。这就是我正在研究的,但现在有些茫然。
任何建议/方向/想法将不胜感激。
编辑:当我折叠并重新展开它们包含在其中的 panelBox 时,看起来 outputText 字段也会更新。所以我想知道是否有某种方法可以让我手动执行相同的更新......
谢谢,卡里姆