How to calculate ADF table column

 一、概述

很多时候,我们需要统计表格的某一列的总和,然而ADF table并没有直接提供这种功能,这需要我们自己写代码来实现。效果如下图:


 

 

二、实现

 

  1. BC层实现

 

假设当前表格基于的VO名为SearchRebateVO,里面有入库数量、出库数量、销售金额、现有数量列需要求和,现在只以销售金额(对应VO中的字段为AdjSaleAmount)为例,在VO中新建一个名为(TotalAdjSaleAmount)的字段,为oracle.jbo.domain.Number(AdjSaleAmount类型一致)。如图所示:


 

然后生成VO对应的VOImplVORowImpl(SearchRebateVOImplSearchRebateVORowImpl),在VOImpl添加一个方法为如下

 

   public Number getTotalAdjSalesAmount() {

       return getTotal("AdjSaleAmount");

   }

 

为了便于代码的重用,对如何汇总做了封装,这里继承了ViewObjectImpl里面对getTotal(StringattributeName)做了实现

 

import oracle.jbo.Row;

import oracle.jbo.RowSetIterator;

import oracle.jbo.domain.Number;

import oracle.jbo.server.ViewObjectImpl;

 

public class CustomViewObjectImpl extends ViewObjectImpl {

   

   

   protected Number getTotal(String attributeName) {

       Number total = new Number(0);

       RowSetIterator rsi = createRowSetIterator(null);

       while (rsi.hasNext()) {

           Row r = rsi.next();

           Number adjSaleAmount = (Number)r.getAttribute(attributeName);

           if (adjSaleAmount != null) {

               total = total.add(adjSaleAmount);

           }

       }

       rsi.closeRowSetIterator();

       return total;

   }

}

 

VOImpl类由原来继承ViewObjectImpl,改为继承类CustomViewObjectImpl。接下来,在VORowImpl类中做适当的修改

 

   

   public Number getTotalAdjSaleAmount() {

       return((SearchRebateVOImpl)getViewObject()).getTotalAdjSalesAmount();

       //return (Number) getAttributeInternal(TOTALADJSALEAMOUNT);

   }

 

现在只需要在页面进行些处理就OK

 

  1. UI层实现

 

在页面定义文件中添加AttributeBinding,如下图步骤

 



 


在页面tablecolumn footer中通过EL表达式引用TotalAdjSaleAmount


注:如果需要给outputText组件添加convertNumberoutputTextvalue中不能出现非数字字符,另外还需写成#{bindings.TotalAdjSaleAmount.inputValue},因为#{bindings.TotalAdjSaleAmount}是非数字类型的对象。

并且给该文本输出框添加partialTriggers和rendered(添加rendered,如果表格没有显示行的时候,将不会显示tablefooter)

 

<f:facet name="footer">

   <af:outputTextvalue="汇总:#{bindings.TotalAdjSaleAmount}" id="ot1"

                  inlineStyle="text-align:right;"

                  partialTriggers="s4:it3 s5:it8"

                                         rendered="#{bindings.SearchRebate1.estimatedRowCount> 0}"/>

</f:facet>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值