ADF11g-030: 通过SQL生成动态table
来源:互联网 发布:中国北方经济崩溃知乎 编辑:程序博客网 时间:2024/06/03 20:58
一、介绍
本文介绍如何根据节目输入的sql来生成动态table,方法有些另类,后端使用的是纯Java API来做的。是因为我在使用viewobject操作时,发现太麻烦了。这里列出一些主要步骤和程序代码。
二、创建ADF Application,Model层代码如下
public DynamicTableData getDynamicTableDataFromSQL(String sql) { DynamicTableData tableData = new DynamicTableData(); List<String> columns = new ArrayList<String>(); List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); Statement stat = this.getDBTransaction().createStatement(-1); ResultSet rs = null; try { rs = stat.executeQuery(sql); ResultSetMetaData metaData = rs.getMetaData(); int count = metaData.getColumnCount(); for(int i=1; i<=count; i++) { columns.add(metaData.getColumnName(i)); } while(rs.next()) { Map<String, Object> row = new HashMap<String, Object>(); for(int i=0; i<columns.size(); i++) { String column = columns.get(i); Object value = rs.getObject(column); row.put(column, value); } data.add(row); } tableData.setColumns(columns); tableData.setData(data); } catch (SQLException e) { e.printStackTrace(); } return tableData; }
package model;import java.io.Serializable;import java.util.List;import java.util.Map;public class DynamicTableData implements Serializable { /** * 列集合 */ private List<String> columns; /** * 数据集合,一个map对象代表一行数据,key是列名称,value是列数据库 */ List<Map<String, Object>> data; public DynamicTableData() { super(); } public DynamicTableData(List<String> columns, List<Map<String, Object>> data) { this.columns = columns; this.data = data; } public void setColumns(List<String> columns) { this.columns = columns; } public List<String> getColumns() { return columns; } public void setData(List<Map<String, Object>> data) { this.data = data; } public List<Map<String, Object>> getData() { return data; }}说明:将方法getDynamicTableDataFromSQL公布到Client Interface
三、View层代码
1.Manage Bean,将manage bean在taskflow文件中配置好。
package view;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import model.DynamicTableData;import oracle.adf.model.BindingContext;import oracle.binding.BindingContainer;import oracle.binding.OperationBinding;public class DynamicTableBean { private List tableData; private List columns; private DynamicTableData dynamicTableData; public DynamicTableBean() { /* tableData = new ArrayList(); Map map1 = new HashMap(); map1.put("name", "AAAa"); map1.put("age", "44"); Map map2 = new HashMap(); map2.put("name", "bbbb"); map2.put("age", "55"); tableData.add(map1); tableData.add(map2); columns = new ArrayList(); columns.add("name"); columns.add("age"); */ } public String executeQuery() { BindingContainer bindings = getBindings(); OperationBinding operationBinding = bindings.getOperationBinding("getDynamicTableDataFromSQL"); DynamicTableData result = (DynamicTableData)operationBinding.execute(); this.dynamicTableData = result; return null; } public void setTableData(List tableData) { this.tableData = tableData; } public List getTableData() { if(dynamicTableData != null) { tableData = dynamicTableData.getData(); } return tableData; } public void setColumns(List columns) { this.columns = columns; } public List getColumns() { if(dynamicTableData != null) { columns = dynamicTableData.getColumns(); } return columns; } public void setDynamicTableData(DynamicTableData dynamicTableData) { this.dynamicTableData = dynamicTableData; } public DynamicTableData getDynamicTableData() { return dynamicTableData; } public BindingContainer getBindings() { return BindingContext.getCurrent().getCurrentBindingsEntry(); }}
2.页面代码
<?xml version='1.0' encoding='UTF-8'?><jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document id="d1"> <af:messages id="m1"/> <af:form id="f1"> <af:panelGroupLayout id="pgl1" layout="vertical"> <af:panelGroupLayout id="pgl2" layout="vertical"> <af:panelFormLayout id="pfl1"> <af:inputText value="#{bindings.sql.inputValue}" label="#{bindings.sql.hints.label}" required="#{bindings.sql.hints.mandatory}" columns="50" maximumLength="#{bindings.sql.hints.precision}" shortDesc="#{bindings.sql.hints.tooltip}" id="it1" rows="4"> <f:validator binding="#{bindings.sql.validator}"/> </af:inputText> <af:commandButton text="Execute Query" disabled="#{!bindings.getDynamicTableDataFromSQL.enabled}" id="cb1" action="#{viewScope.dynamicTableBean.executeQuery}"/> </af:panelFormLayout> </af:panelGroupLayout> <af:panelGroupLayout id="pgl3" layout="vertical"> <af:table value="#{viewScope.dynamicTableBean.tableData}" var="row" rowBandingInterval="0" id="t1" width="100%"> <af:forEach var="def" items="#{viewScope.dynamicTableBean.columns}"> <af:column headerText="#{def}" sortable="true" id="column1"> <af:outputText value="#{row[def]}" id="ot1"/> </af:column> </af:forEach> </af:table> </af:panelGroupLayout> </af:panelGroupLayout> </af:form> </af:document> </f:view></jsp:root>
- ADF11g-030: 通过SQL生成动态table
- 通过SQL生成动态table
- js通过后台配置动态生成html table表格
- Hive 通过shell动态生成SQL
- javascript动态生成table
- 动态生成table
- 动态生成table列表
- 动态生成Table、DataSet
- 动态生成table
- 动态生成Table
- Jquery动态生成table
- jsp动态生成table
- ajax动态生成table
- ajax动态生成table
- JS动态生成Table
- 动态生成table
- ajax动态生成table
- ADF11g-003:ADF计算Table列
- 精度问题 校oj新手赛 第二题Average
- 字符串转换成字节序列
- Spring切面管理日志
- 一次css交流
- 笔记
- ADF11g-030: 通过SQL生成动态table
- 字符串字面值
- assert断言学习
- 正向代理与反向代理的区别
- 什么是缓冲文件系统和非缓冲文件系统
- jquery基本选择器
- Velocity
- 收益分配应遵循哪些基本原则
- C#自定义属性