很多时候,我们需要统计表格的某一列的总和,然而ADF table并没有直接提供这种功能,这需要我们自己写代码来实现。效果如下图:
二、实现
- BC层实现
假设当前表格基于的VO名为SearchRebateVO,里面有入库数量、出库数量、销售金额、现有数量列需要求和,现在只以销售金额(对应VO中的字段为AdjSaleAmount)为例,在VO中新建一个名为(TotalAdjSaleAmount)的字段,为oracle.jbo.domain.Number(与AdjSaleAmount类型一致)。如图所示:
然后生成VO对应的VOImpl和VORowImpl类(SearchRebateVOImpl和SearchRebateVORowImpl),在VOImpl添加一个方法为如下
|
为了便于代码的重用,对如何汇总做了封装,这里继承了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 { } |
将VOImpl类由原来继承ViewObjectImpl,改为继承类CustomViewObjectImpl。接下来,在VORowImpl类中做适当的修改
|
现在只需要在页面进行些处理就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">
</f:facet>