来自数据控件的Java ADF存储值不';直到下一次运行才显示

来自数据控件的Java ADF存储值不';直到下一次运行才显示,java,jdeveloper,oracle-adf,Java,Jdeveloper,Oracle Adf,基本上,我有一个包含许多组件的JSF页面,包括一个ADF表,其中填充了从数据控制类中的getData()方法返回的数据列表。 在表格上方,我试图显示一些根据显示的数据计算出的值,但字段值没有正确显示 (我使用的是JDEV11.1.1.5) 数据控制类称为RecentDeals,getData()方法返回交易对象列表,其中包括许多字段(日期、值、名称等) RecentDeals类还包含私有变量,用于存储要在表上方显示的计算(平均)值(例如avgSize、avgTerm、avgRent等)。 在同一

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

(我使用的是JDEV11.1.1.5)

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

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;
    }
}
公共类最近的交易{
私人双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字段在结果集更改的同时按预期刷新


卡里姆

你能解释一下吗?我也有同样的问题。