基本上我有一个包含许多组件的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 of Deal对象中的数据,但计算出的字段只显示为零。 当用户选择下一个“条件”来填充表格时(从标题中的下拉列表中),然后使用先前存储的值更新计算的字段。 换句话说,标题字段显示与前一组数据相关的平均值,并且每个后续用户选择周期似乎都会继续 - 因此用户被迫选择另一个值来获得所需的平均值,这显然是不可接受的
我已在调试模式中确认计算正在正确执行,并且在返回List之前,正确的值存储在私有变量中。
不确定我在这里缺少什么,但我想我需要以某种方式“刷新”outputText组件以立即显示预期值。 这就是我正在研究的东西,但现在正处于一种损失之中。
任何建议/方向/想法都会非常感激。
编辑:当我折叠并重新展开它们包含在其中的panelBox时,看起来outputText字段也会更新。所以我想知道我是否有办法手动执行相同的更新...
谢谢, 卡里姆
答案 0 :(得分:1)
我找到的解决方案如下:
修改DC类getData方法以返回包含原始List结果集和我需要显示的4个变量的新DTO。 然后我将结果集和变量从返回的DTO下面绑定到相同的相应组件(ADF表中的结果集,结果集表中的标题中的4个outputText字段中的变量)。 然后我在Iterator中为属性绑定添加了一个Refresh =“IfNeeded”属性。
现在我的outputText字段在resultSet更改的同时按预期刷新!
卡里姆