在此之前写过一篇关于如何计算Table列的博客,参见http://blog.csdn.net/ygj26/article/details/6902767
后又发现一种不错的方法(来自Jheadstart),和大家分享一下!
工程代码请到 http://www.jdeveloper.com.cn/forum.php?mod=viewthread&tid=12&extra=page%3D1 下载
以HR中的Employees表为例,对表中的Salary字段进行汇总求和:
1.创建Manage Bean TableBean.java
- package view;
- import java.sql.SQLException;
- import java.util.HashMap;
- import java.util.Map;
- import oracle.adf.view.rich.component.rich.data.RichTable;
- import oracle.jbo.domain.Number;
- public class TableBean {
- private RichTable _table;
- public TableBean() {
- super();
- }
- /**
- * 用户对指定的列进行求和,如 #{requestScope.tableBean.sumRow['Salary']}
- */
- private Map sumRow = new HashMap() {
- @Override
- public Object get(Object key) {
- Number total = new Number(0);
- for(int i=0; i<getTable().getRowCount(); i++) {
- Map rowData = (Map)getTable().getRowData(i);
- if(rowData != null) {
- Object objectValue = rowData.get(key);
- if(objectValue == null) {
- continue;
- }
- Number value = null;
- if(objectValue instanceof Number) {
- value = (Number)objectValue;
- } else {
- try {
- value = new Number(objectValue);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(value != null) {
- total = total.add(value);
- }
- }
- }
- return total;
- }
- };
- public void setTable(RichTable _table) {
- this._table = _table;
- }
- public RichTable getTable() {
- return _table;
- }
- public void setSumRow(Map sumRow) {
- this.sumRow = sumRow;
- }
- public Map getSumRow() {
- return sumRow;
- }
- }
2. 将TableBean配置到Manage Bean
- <managed-bean id="__4">
- <managed-bean-name id="__3">EmployeeTableBean</managed-bean-name>
- <managed-bean-class id="__2">view.TableBean</managed-bean-class>
- <managed-bean-scope id="__1">request</managed-bean-scope>
- </managed-bean>
3. 在页面创建Table,并和Manage Bean绑定,注意binding="#{EmployeeTableBean.table}"和<af:outputText id="ot5" value="#{EmployeeTableBean.sumRow['Salary']}"/>
- <af:table value="#{bindings.EmployeesView1.collectionModel}"
- var="row" rows="#{bindings.EmployeesView1.rangeSize}"
- emptyText="#{bindings.EmployeesView1.viewable ? 'No data to display.' : 'Access Denied.'}"
- fetchSize="#{bindings.EmployeesView1.rangeSize}"
- rowBandingInterval="0" id="resId1"
- binding="#{EmployeeTableBean.table}"
- partialTriggers="::cb1"> <!--中间的部分内容省略-->
- <af:column sortProperty="Salary" sortable="false"
- headerText="#{bindings.EmployeesView1.hints.Salary.label}"
- id="resId1c4">
- <af:outputText value="#{row.Salary}" id="ot2">
- <af:convertNumber groupingUsed="false"
- pattern="#{bindings.EmployeesView1.hints.Salary.format}"/>
- </af:outputText>
- <f:facet name="footer">
- <af:outputText id="ot5"
- value="#{EmployeeTableBean.sumRow['Salary']}"/>
- </f:facet>
- </af:column>
- </af:table>
4.查看结果
结果1:
结果2:
转自:http://blog.csdn.net/ygj26/article/details/7334228