来自数据控件的Java ADF存储值不';直到下一次运行才显示
基本上,我有一个包含许多组件的JSF页面,包括一个ADF表,其中填充了从数据控制类中的getData()方法返回的数据列表。 在表格上方,我试图显示一些根据显示的数据计算出的值,但字段值没有正确显示 (我使用的是JDEV11.1.1.5) 数据控制类称为RecentDeals,getData()方法返回交易对象列表,其中包括许多字段(日期、值、名称等) RecentDeals类还包含私有变量,用于存储要在表上方显示的计算(平均)值(例如avgSize、avgTerm、avgRent等)。 在同一个getData()方法中,在遍历交易列表以执行所需计算(并存储沿途的各个值)之后,在返回填充表的交易对象列表之前,将使用计算出的平均值更新变量 以下是守则的摘录,以供参考:来自数据控件的Java ADF存储值不';直到下一次运行才显示,java,jdeveloper,oracle-adf,Java,Jdeveloper,Oracle Adf,基本上,我有一个包含许多组件的JSF页面,包括一个ADF表,其中填充了从数据控制类中的getData()方法返回的数据列表。 在表格上方,我试图显示一些根据显示的数据计算出的值,但字段值没有正确显示 (我使用的是JDEV11.1.1.5) 数据控制类称为RecentDeals,getData()方法返回交易对象列表,其中包括许多字段(日期、值、名称等) RecentDeals类还包含私有变量,用于存储要在表上方显示的计算(平均)值(例如avgSize、avgTerm、avgRent等)。 在同一
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;
}
}
公共类最近的交易{
私人双avgSize;
私人双平均术语;
私人双重抵押;
...
公共最近交易{
超级();
avgSize=0.0;
平均温度=0.0;
avgRent=0.0;
...
}
公共列表getData(列出业务单位){
列表事务=新建ArrayList();
列表交易=新建ArrayList();
TransactionSessionBean transBean=lookupTransactionSessionBean();
双尺寸=0.0;
双项=0.0;
双倍总基租=0.0;
...
整数记录计数=0;
if(businessUnits!=null&&!businessUnits.isEmpty()){
transactions=transBean.getDealsData(SystemUtil.getCurrentUser(),businessUnits);
recordCount=transactions.size();
如果(记录计数>0){
for(int i=0;i
当我运行我的JSF页面时,它正确地显示了来自Deal对象列表的数据,但计算字段只显示零。
当用户选择下一个“标准”来填充表格时(从标题中的下拉列表中),计算字段随后将使用先前存储的值进行更新。
因此,换句话说,标题字段显示了与前一组数据相关的平均值,并且对于每个后续用户选择,周期似乎都在继续-因此用户被迫选择另一个值以获得所需的平均值,这显然是不可接受的
我已经在调试模式下确认,在返回列表之前,计算正在正确执行,并且正确的值存储在私有变量中
不确定这里缺少了什么,但我想我需要以某种方式“刷新”outputText组件以立即显示预期值。
这就是我正在研究的,但现在有点不知所措
任何建议/方向/想法都将不胜感激
编辑:当我折叠并重新展开包含在其中的panelBox时,outputText字段似乎也会更新。所以我想知道是否有办法让我手动执行相同的更新
谢谢,
Karim我得出的解决方案如下: 修改了DC类getData方法,以返回一个新的DTO,其中包含原始列表结果集和我需要显示的4个变量。 然后,我将返回的DTO下面的resultset和变量绑定到相同的相应组件(ADF表中的resultset,resultset表上方标题中4个outputText字段中的变量)。 然后,我为属性绑定的迭代器添加了Refresh=“IfNeeded”属性 现在,我的outputText字段在结果集更改的同时按预期刷新
卡里姆你能解释一下吗?我也有同样的问题。