您的位置:首页 > 其它

How to calculate ADF table column

2014-08-15 23:22 337 查看
 一、概述

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

 


 

二、实现

 

BC层实现
 

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



 

然后生成VO对应的VOImpl和VORowImpl类(SearchRebateVOImpl和SearchRebateVORowImpl),在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了

 

UI层实现
 

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

 




 


在页面table的column footer中通过EL表达式引用TotalAdjSaleAmount



注:如果需要给outputText组件添加convertNumber,outputText的value中不能出现非数字字符,另外还需写成#{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>

ae27
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐