swt,用在web上的下载保存的功能,跟服务器交互

昨天搞了一大天,终于搞明白了swt用在web上的的基本思想

先说说我的想要实现的功能,我是想在用户机上把查询出来的数据保存,可是我在用户机上点了保存按钮后,那个保存的对话框竟然是在服务器上打开的,我还以为我写的代码有问题,经过昨天一天的搜罗资料,我才明白,下面是重点了,swt是调用JNI的,所以想要在用户机上打开对话框,那么就需要用户机上安装第三方软件了,如果没有安装,那么用户是对服务器进行操作的,远程控制?汗。。

虽然下在swt上的心血白费了,可毕竟是我的劳动成果啊,还是把保存的功能粘贴在下边

首先jsp上需要有保存按钮

<html:button property="DriverQueryInsertButton" οnclick="DriverQueryJavaScript('driverQueryInsertButton');">保存</html:button>

<script language="javascript" type="text/javascript">
function DriverQueryJavaScript(driverQueryButton)
{
 var insertButton = 'driverQueryInsertButton' ;
 if(driverQueryButton==insertButton)
 {
  document.forms[0].action='DriverQuery.do?driverQueryType=driverQueryInsertButton' ;
  document.forms[0].submit();
 }
</script>

 接下来判断是否点了保存按钮

if(driverQueryPageSaveNoncePage!=null)
    {
     DriverQuerySaveFileSqlBean dqsfsb = new DriverQuerySaveFileSqlBean();
     
     if(dqsfsb.sqlDriverQuerySaveFileSqlBeanPage(response,sessionDriverQueryNameInput,sessionDriverQueryIdentityCardNumberInput,sessionDriverQueryRecordNumberInput,sessionDriverQueryAccumulativeTotalIntegralInput,sessionDriverQueryPermitDriverModelInput,sessionDriverQueryManageDepartmentInput,sessionPageStartRow,sessionPageEndRow))
     {
      System.out.println("驾驶员保存本页验证成功,允许保存本地文件");
     }

 保存功能的页面

package bean;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import javax.servlet.http.HttpServletResponse;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

import util.PageDBConnection;

public class DriverQuerySaveFileSqlBean
{   
   //保存一页
 public boolean sqlDriverQuerySaveFileSqlBeanPage(HttpServletResponse response,String sessionDriverQueryNameInput,String sessionDriverQueryIdentityCardNumberInput,String sessionDriverQueryRecordNumberInput,String sessionDriverQueryAccumulativeTotalIntegralInput,String sessionDriverQueryPermitDriverModelInput,String sessionDriverQueryManageDepartmentInput,Object sessionPageStartRow,Object sessionPageEndRow) throws Exception
 {
  boolean sqlDriverQuerySaveFileSqlError = false ;
  try 
  {
   FileDialog dlg;  //定义一个文件存取窗口
   // 每个swt程序在最开始都必须创建一个Display对象。它负责swt和操作系统之间的通信。它将swt/JFace的各种调用转化为系统的底层调用
//   Display display = new Display();
   Display display = Display.getDefault();
   System.out.println(display);
   Shell shell = new Shell(display);//一个Shell对象就是一个窗口。你可以在上面放置各种部件创建丰富的图形界面。
   dlg = new FileDialog(shell, SWT.SAVE);// 设置为保存对话框
         // 设置保存类型
         dlg.setFilterNames(new String[]{
                   "Text Files(*.txt)",
                   "Excel Files (*.xls)",
                   "All Files (*.*)"
                 });
         dlg.setFilterExtensions(new String[] {
           "*.txt", "*.xls",  "*.*"
         });
         String fileName = null;//所填写的文件名字

         String fn = "";//用来判断用户有没填写文件名字
         if (fn.equals(""))
         {
          fileName = dlg.open();//打开保存窗口
          if(fileName != null)
           fn = fileName;
         }
         if (fn != "")
         {
          final String SQL = "select * from person where name =  '李猛' " ;
          System.out.println(SQL);
   
          rs = PageDBConnection.getResultSet(SQL);
   
          byte[] b = null;
          FileOutputStream fos = new FileOutputStream(fn);
          OutputStreamWriter out = new OutputStreamWriter(fos);//写入文件流
          out.write(dlg.getText());
          ResultSetMetaData meta = rs.getMetaData();//获得ResultSetMeataData对象。所有方法的参数都是列的索引号,即第几列,从1开始
          for(int i=1; i<meta.getColumnCount();i++)//获得该ResultSet所有列的数目
          {
           b = (meta.getColumnName(i) + "\t").getBytes();//获得i列对应数据类型的类,输出列
           fos.write(b);//写入文件
          }
          // thisPageStartRow是获得了当前页面的起始行,thisPageEndRow是当前页面的结束行
          int thisPageStartRow = Integer.parseInt(sessionPageStartRow.toString());
          int thisPageEndRow = Integer.parseInt(sessionPageEndRow.toString());
          //利用thisPageStartRowOne判断应该保存的是哪页
          int thisPageStartRowOne = 0 ;
          while(rs.next())
          {
           //一直循环到想保存的页,保存页之前的不进行操作
           if(thisPageStartRowOne<thisPageStartRow)
           {
            thisPageStartRowOne++ ;
           }
           //判断是否是需要保存的页
           else if(thisPageStartRowOne>=thisPageStartRow&&thisPageStartRowOne<=thisPageEndRow)
           {
            thisPageStartRowOne++;
            fos.write("\r\n".getBytes());//让数据换行
            for(int i=1;i<meta.getColumnCount();i++)
            {
              b = (rs.getString(i) + "\t").getBytes();//输出数据,循环一次数据一个字段
              fos.write(b);
            }
           }
           //一旦保存完毕,则退出循环
           if(thisPageStartRowOne>=thisPageEndRow)
           {
            sqlDriverQuerySaveFileSqlError = true;
            break ;
           }
          }
          fos.close();//该关的关
          out.close();
          shell.setText(fn);
    MessageBox successBox = new MessageBox(shell);
    successBox.setText("信息");
    successBox.setMessage("保存文件成功!");
    successBox.open();
         }
         //display.dispose();和display.sleep();其中有一个能够执行到程序都可以正常
         display.dispose(); // 释放底层的资源
   shell.dispose();
   while (!shell.isDisposed()) // 当窗体未被关闭时执行循环体内的代码
      {
       // 如果未发生事件,通过sleep方法进行监视事件队列
       if (!display.readAndDispatch()) 
       {
        display.sleep();//关闭线程
       }
      }
  }
  catch (SQLException e) 
  {
   e.printStackTrace();
  } 
  finally 
  {
   if (rs != null) 
   {
    try 
    {
     rs.close();
    } 
    catch (SQLException e) 
    {
     e.printStackTrace();
    }
   }
  }
  return sqlDriverQuerySaveFileSqlError;
 }
}

 这个保存的功能是可以保存一页的功能,要想保存全部数据,可以while(rs.next())中的判断

 

黑色头发  http://heisetoufa.iteye.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值