ADF计算Table列总计

一、概述

很多时候,我们需要统计表格的某一列的总和,然而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(String attributeName)做了实现

import oracle.jbo.Row;

import oracle.jbo.RowSetIterator;

import oracle.jbo.domain.Number;

import oracle.jbo.server.ViewObjectImpl;

/**

* @author King Yin

* @version 1.0

*/

public class CustomViewObjectImpl extends ViewObjectImpl {

   

    /**

     *  汇总

     * @param attributeName 要汇总的属性列名称

     * @return

     */

    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类中做适当的修改

    /**

     * Gets the attribute value for the calculated attribute TotalAdjSaleAmount.

     * @return the TotalAdjSaleAmount

     */

    public Number getTotalAdjSaleAmount() {

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

        //return (Number) getAttributeInternal(TOTALADJSALEAMOUNT);

    }

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

  1. UI层实现

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

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

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

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

<f:facet name="footer">

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

                   inlineStyle="text-align:right;"

                   partialTriggers="s4:it3 s5:it8"

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

</f:facet>

 

本文转自:http://blog.csdn.net/ygj26/article/details/6902767

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值