通过SQL生成动态table

一、介绍

本文介绍如何根据节目输入的sql来生成动态table,方法有些另类,后端使用的是纯Java API来做的。是因为我在使用viewobject操作时,发现太麻烦了。这里列出一些主要步骤和程序代码。



二、创建ADF Application,Model层代码如下

[java]  view plain copy
  1. public DynamicTableData getDynamicTableDataFromSQL(String sql) {  
  2.     DynamicTableData tableData = new DynamicTableData();  
  3.     List<String> columns = new ArrayList<String>();  
  4.     List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();  
  5.     Statement stat =  
  6.         this.getDBTransaction().createStatement(-1);  
  7.     ResultSet rs = null;  
  8.     try {  
  9.         rs = stat.executeQuery(sql);  
  10.         ResultSetMetaData metaData = rs.getMetaData();  
  11.         int count = metaData.getColumnCount();  
  12.         for(int i=1; i<=count; i++) {  
  13.             columns.add(metaData.getColumnName(i));  
  14.         }  
  15.         while(rs.next()) {  
  16.             Map<String, Object> row = new HashMap<String, Object>();  
  17.             for(int i=0; i<columns.size(); i++) {  
  18.                 String column = columns.get(i);  
  19.                 Object value = rs.getObject(column);  
  20.                 row.put(column, value);  
  21.             }  
  22.             data.add(row);  
  23.         }  
  24.         tableData.setColumns(columns);  
  25.         tableData.setData(data);  
  26.     } catch (SQLException e) {  
  27.         e.printStackTrace();  
  28.     }  
  29.     return tableData;  
  30. }  

[java]  view plain copy
  1. package model;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. public class DynamicTableData implements Serializable {  
  9.     /** 
  10.      * 列集合 
  11.      */  
  12.     private List<String> columns;  
  13.     /** 
  14.      * 数据集合,一个map对象代表一行数据,key是列名称,value是列数据库 
  15.      */  
  16.     List<Map<String, Object>> data;  
  17.       
  18.     public DynamicTableData() {  
  19.         super();  
  20.     }  
  21.       
  22.     public DynamicTableData(List<String> columns, List<Map<String, Object>> data) {  
  23.         this.columns = columns;  
  24.         this.data = data;  
  25.     }  
  26.   
  27.     public void setColumns(List<String> columns) {  
  28.         this.columns = columns;  
  29.     }  
  30.   
  31.     public List<String> getColumns() {  
  32.         return columns;  
  33.     }  
  34.   
  35.     public void setData(List<Map<String, Object>> data) {  
  36.         this.data = data;  
  37.     }  
  38.   
  39.     public List<Map<String, Object>> getData() {  
  40.         return data;  
  41.     }  
  42. }  
说明:将方法getDynamicTableDataFromSQL公布到Client Interface

三、View层代码

    1.Manage Bean,将manage bean在taskflow文件中配置好。

[java]  view plain copy
  1. package view;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import model.DynamicTableData;  
  9.   
  10. import oracle.adf.model.BindingContext;  
  11.   
  12. import oracle.binding.BindingContainer;  
  13. import oracle.binding.OperationBinding;  
  14.   
  15. public class DynamicTableBean {  
  16.     private List tableData;  
  17.     private List columns;  
  18.     private DynamicTableData dynamicTableData;  
  19.       
  20.     public DynamicTableBean() {  
  21.         /* tableData = new ArrayList(); 
  22.         Map map1 = new HashMap(); 
  23.         map1.put("name", "AAAa"); 
  24.         map1.put("age", "44"); 
  25.         Map map2 = new HashMap(); 
  26.         map2.put("name", "bbbb"); 
  27.         map2.put("age", "55"); 
  28.         tableData.add(map1); 
  29.         tableData.add(map2); 
  30.         columns = new ArrayList(); 
  31.         columns.add("name"); 
  32.         columns.add("age"); */  
  33.     }  
  34.       
  35.     public String executeQuery() {  
  36.         BindingContainer bindings = getBindings();  
  37.         OperationBinding operationBinding = bindings.getOperationBinding("getDynamicTableDataFromSQL");  
  38.         DynamicTableData result = (DynamicTableData)operationBinding.execute();  
  39.         this.dynamicTableData = result;  
  40.         return null;  
  41.     }  
  42.       
  43.     public void setTableData(List tableData) {  
  44.         this.tableData = tableData;  
  45.     }  
  46.   
  47.     public List getTableData() {  
  48.         if(dynamicTableData != null) {  
  49.             tableData = dynamicTableData.getData();  
  50.         }  
  51.         return tableData;  
  52.     }  
  53.   
  54.     public void setColumns(List columns) {  
  55.         this.columns = columns;  
  56.     }  
  57.   
  58.     public List getColumns() {  
  59.         if(dynamicTableData != null) {  
  60.             columns = dynamicTableData.getColumns();  
  61.         }  
  62.         return columns;  
  63.     }  
  64.   
  65.     public void setDynamicTableData(DynamicTableData dynamicTableData) {  
  66.         this.dynamicTableData = dynamicTableData;  
  67.     }  
  68.   
  69.     public DynamicTableData getDynamicTableData() {  
  70.         return dynamicTableData;  
  71.     }  
  72.   
  73.     public BindingContainer getBindings() {  
  74.         return BindingContext.getCurrent().getCurrentBindingsEntry();  
  75.     }  
  76. }  

     2.页面代码

[html]  view plain copy
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"  
  3.           xmlns:f="http://java.sun.com/jsf/core"  
  4.           xmlns:h="http://java.sun.com/jsf/html"  
  5.           xmlns:af="http://xmlns.oracle.com/adf/faces/rich">  
  6.   <jsp:directive.page contentType="text/html;charset=UTF-8"/>  
  7.   <f:view>  
  8.     <af:document id="d1">  
  9.       <af:messages id="m1"/>  
  10.       <af:form id="f1">  
  11.         <af:panelGroupLayout id="pgl1" layout="vertical">  
  12.           <af:panelGroupLayout id="pgl2" layout="vertical">  
  13.             <af:panelFormLayout id="pfl1">  
  14.               <af:inputText value="#{bindings.sql.inputValue}"  
  15.                             label="#{bindings.sql.hints.label}"  
  16.                             required="#{bindings.sql.hints.mandatory}"  
  17.                             columns="50"  
  18.                             maximumLength="#{bindings.sql.hints.precision}"  
  19.                             shortDesc="#{bindings.sql.hints.tooltip}" id="it1"  
  20.                             rows="4">  
  21.                 <f:validator binding="#{bindings.sql.validator}"/>  
  22.               </af:inputText>  
  23.               <af:commandButton  
  24.                                 text="Execute Query"  
  25.                                 disabled="#{!bindings.getDynamicTableDataFromSQL.enabled}"  
  26.                                 id="cb1"  
  27.                                 action="#{viewScope.dynamicTableBean.executeQuery}"/>  
  28.             </af:panelFormLayout>  
  29.           </af:panelGroupLayout>  
  30.           <af:panelGroupLayout id="pgl3" layout="vertical">  
  31.             <af:table value="#{viewScope.dynamicTableBean.tableData}" var="row"  
  32.                       rowBandingInterval="0" id="t1" width="100%">  
  33.               <af:forEach var="def" items="#{viewScope.dynamicTableBean.columns}">  
  34.                 <af:column headerText="#{def}" sortable="true" id="column1">  
  35.                   <af:outputText value="#{row[def]}" id="ot1"/>  
  36.                 </af:column>  
  37.               </af:forEach>  
  38.             </af:table>  
  39.           </af:panelGroupLayout>  
  40.         </af:panelGroupLayout>  
  41.       </af:form>  
  42.     </af:document>  
  43.   </f:view>  
  44. </jsp:root>  


转自:http://blog.csdn.net/ygj26/article/details/8744272

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值