Vaadin的組件注射器,瞎寫,隨便看

本文详细介绍了Table Injector类的实现,包括如何注入Table组件、设置ID、获取Bean等核心功能,以及Table Set类的初始化、数据读取、遍历等功能。重点阐述了如何通过Table Set类获取表格数据,并通过Table Injector类将这些数据注入到Vaadin框架的Table组件中,实现动态展示数据的功能。
 

TableInjector類

package com.arlen.injectors;

import org.apache.log4j.Logger;

import com.arlen.tableset.TableSet;

import com.vaadin.ui.Table;

import com.vaadin.ui.Component;

public class TableInjector implements IFContainerInjector<Table>{

private static final long serialVersionUID = -1537743412190976017L;

private TableSet bean;

private String id;

private Logger logger = Logger.getLogger(TableInjector.class);

@Override

public Table injectIntoComponent(Component component) {

Table table = null;

if(Table.class.isInstance(component)){

table = (Table)component;

int Ccount = bean.getColumnNum();

if(Ccount>0){

Object[] labels=bean.getColumnNames();

for(int i=0;i<Ccount;i++)

table.addContainerProperty(labels[i].toString(), String.class, null);

if(bean.first()){

bean.next();

for(int i = 0;bean.hasNext();i++){

table.addItem(bean.nextRow().toArray(), new Integer(i));

}

}

}

else{

logger.error("No data related to this table!");

}

}

else{

logger.error("Failed to initialize the page component due to wrong parameter!");

}

return table;

}

@Override

public void setID(String id) {

this.id=id;

}

@Override

public String getID() {

return id;

}

public TableSet getBean() {

return bean;

}

public void setBean(TableSet bean) {

this.bean = bean;

}

}

package com.arlen.injectors;

import java.io.Serializable;

import com.vaadin.ui.Component;

public interface IFContainerInjector<T> extends Serializable{
 public String getID();
 public void setID(String dataSetName);
 public T injectIntoComponent(Component component);
}

 

TableSet

package com.arlen.tableset;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.log4j.Logger;

import com.arlen.dbUtil.DataOp;

public class TableSet {
 private ArrayList<Row> rows = new ArrayList<Row>();
 private String tableName;
 private int rowNum=0;
 private int columnNum=0;
 private int currentRow=0;
 private Logger logger = Logger.getLogger(TableSet.class);
 public TableSet(){}
 public TableSet(String tableName){
  init(tableName,null);
 }

 private void init(String tableName,String condition){
  ResultSet rsRows=null;
  ResultSet rsColumns=null;
  DataOp dataOp=null;
  int currentNum = 1;
  ArrayList<String> tempRow = new ArrayList<String>();
  this.tableName = tableName;
  try{
   dataOp = new DataOp();
   ArrayList<String> columnNames = new ArrayList<String>();
   rsColumns= dataOp.executeSQL("select name from syscolumns where id=object_id('"+tableName+"')");
   StringBuffer sb = new StringBuffer("SELECT ");
   if(rsColumns!=null&&rsColumns.next()){
    while(true){
     columnNames.add(rsColumns.getString(1));
     sb.append(rsColumns.getString(1));
     if(!rsColumns.next())
      break;
     else
      sb.append(",");
    }
    sb.append(" FROM ").append(tableName);
    if(condition!=null){
     sb.append(" WHERE ").append(condition);
    }
    rsRows = dataOp.executeSQL(sb.toString());
    this.columnNum = columnNames.size();
    rows.add(new Row(0,columnNames));
    if(rsRows!=null){
     while(rsRows.next()){
      for(int i=1;i<=columnNum;i++){
       if(rsRows.getObject(i)!=null)
        tempRow.add(rsRows.getObject(i).toString());
       else
        tempRow.add(" ");
      }
      rows.add(new Row(currentNum,tempRow));
      tempRow=new ArrayList<String>();
      rowNum = rows.size();
      currentNum++;
     }
    }
    tempRow=null;
   }
   else{
    logger.debug("No such table :"+tableName+"existed in database ,please check...");
   }
  }
  catch(SQLException e){
   e.printStackTrace();
  }
  finally{
   try {
    dataOp.close();
    if(rsColumns!=null){
     rsColumns.close();
    }
    if(rsRows!=null){
     rsRows.close();
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }

 public boolean hasNext(){
  if(rows!=null&&rows.size()>0){
   return currentRow>=rowNum?false:true;
  }
  else
   return false;
 }

 public void next(){
  currentRow++;
 }


 public ArrayList<String> nextRow(){
  return rows.get(currentRow++).getRow();
 }

 public int getRowNum() {
  return rowNum;
 }

 public int getColumnNum() {
  return columnNum;
 }

 public String getString(int index){
  return rows.get(currentRow).getRow().get(index);
 }

 public String getString(String columnName){
  int index =rows.get(0).getRow().indexOf(columnName.trim());
  return getString(index);
 }

 public boolean first(){
  if(rows!=null&&rows.size()>0){
   currentRow = 0;
   return true;
  }
  else
   return false;
 }

 public String getTableName() {
  return tableName;
 }

 public void setTableName(String tableName) {
  this.tableName = tableName;
 }

 public Object[] getColumnNames(){
  return rows.get(0).getRow().toArray();
 }

}


/**
 * Private class for row
 * @author Arlen_Li
 *
 */
class Row{
 private int rownum=0;
 private ArrayList<String> contents=new ArrayList<String>();
 public Row(){}
 public Row(int currentRow,ArrayList<String> contents){
  if(contents!=null&&contents.size()>0){
   rownum = currentRow;
   this.contents=contents;
  }
 }
 public ArrayList<String> getRow(){
  if(contents!=null&&contents.size()>0){
   return contents;
  }
  else
   return null;
 }
 public String toString(){
  StringBuffer sb = new StringBuffer("Column");
  sb.append(rownum).append(":");
  if(contents!=null&&contents.size()>0){
   Iterator<String> it = contents.iterator();
   while(it.hasNext()){
    sb.append(it.next()).append(" ");
   }
  }
  return sb.toString();
 }
}

 

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值