来自数据控件的Java ADF存储值在下次运行之前不会显示

时间:2012-12-03 16:58:09

标签: java jdeveloper oracle-adf

基本上我有一个包含许多组件的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字段也会更新。所以我想知道我是否有办法手动执行相同的更新...

谢谢, 卡里姆

1 个答案:

答案 0 :(得分:1)

我找到的解决方案如下:

修改DC类getData方法以返回包含原始List结果集和我需要显示的4个变量的新DTO。 然后我将结果集和变量从返回的DTO下面绑定到相同的相应组件(ADF表中的结果集,结果集表中的标题中的4个outputText字段中的变量)。 然后我在Iterator中为属性绑定添加了一个Refresh =“IfNeeded”属性。

现在我的outputText字段在resultSet更改的同时按预期刷新!

卡里姆