如果是浏览器的话应该是属于客户端的,如果你说的是客户端打开了服务器端的浏览器那可就奇怪了
恕我寡闻了,从未听说过这种现象
不清楚你所说的对话框是不是指浏览器,是的话用confirm应该能解决先把这个解决了,保存路径也许自然就解决了

解决方案 »

  1.   

    不是打开了服务器端的浏览器
    是在客户端按了保存却打开了服务器上的保存的对话框
    就好比在现在这个页面,点文件->另存为的那种保存对话框,不是在客户端打开的,而是在服务器上打开了不清楚你所说的对话框是不是指浏览器,是的话用confirm应该能解决 
    对话框不是浏览器,是浏览器调用的SWT中的方法
      

  2.   

    CSDN的高手呢!!
      

  3.   

    拜托大家,,,
    这到底是因为什么原因呀
    是不是因为我把这个保存功能写到后台的原因呀?保存功能要写到jsp页面上?
    还是在后台需要用到response啊,我的保存功能不是在一个servlet里
    还是需要在jsp上设置什么头文件呀?
    帮帮忙好吗,哪怕给些思路也好
    我真的没办法了
      

  4.   

    我觉得跟你具体的保存处理可能关系不大,问题可能出在jsp调用swt,以及swt弹出窗口这两步上
    你可以先将其他处理注释掉,只关注调用swt弹窗口
    或者可以先不用jsp调用,直接想办法让swt窗口弹出来,看看不经过jsp的窗口能否在客户端弹出,
    先保证这一点再看jsp与swt的衔接是否有问题只能给你提供一些解决问题的办法,我还会继续关注的
      

  5.   

     private void exportData(
                HttpServletResponse response, List resultList) throws
                Exception {
         OutputStream bos = response.getOutputStream();
         if(filetype!=null&filetype.trim().equals("xls"))
         {
         response.setContentType("application/x-msexcel;charset=gb2312");
         response.addHeader("Content-Disposition",
                        "attachment;filename=" + filename);
         StringUtil.unloadToExcel(bos,resultList,null,"\\|");
         }
         else
         {
            
            response.setContentType("text/html;charset=iso8859-1");
            response.addHeader("Content-Disposition",
                               "attachment;filename=" + DEFAULT_FILENAME);
           
            for (Iterator it = resultList.iterator(); it.hasNext(); ) {
                String obj = (String) it.next();
                bos.write(obj.getBytes());
                bos.write('\r');
                bos.write('\n');
            }
         }
        
            
            bos.close();
            response.setStatus(response.SC_OK);
            response.flushBuffer();
        }
      

  6.   

    上面这段程序就是修改http协议里面的
    响应头header
    这样做,肯定没错
      

  7.   

    我也看到了这段,但是这个跟swt不冲突吗
    我刚才把我保存功能全给提取出来了,放到另外一个项目里了
    正在启动,单步测试一下,一会我给报告结果
      

  8.   

    另存为excel文档撒,不是有那样的程序么?另外,采用cookes的方式应该也可以,但不够现实。
      

  9.   

    不用jsp调用,直接想办法让swt窗口弹出来,看看不经过jsp的窗口能否在客户端弹出
    我在登陆的过程中调用了open,还是在服务器这打开的-------------------------------------------------------------------------
    我把swt打开对话框的代码贴在这,大家帮帮忙啊,不胜感激
    package test;import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;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 DQtest
    {   
    public boolean sqlDriverQuerySaveFileSqlBean() throws Exception
    {
    boolean sqlDriverQuerySaveFileSqlError = false ;
    ResultSet rs = null;

    try 
    {
    FileDialog dlg; 
    Display display = new Display();
    System.out.println(display);
    Shell shell = new Shell(display);
    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 abc where xm='zhangsan' " ;
             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();
             for(int i=1; i<meta.getColumnCount();i++)
             {
             b = (meta.getColumnName(i) + "\t").getBytes();
             fos.write(b);
             }
             while(rs.next())
             {
             fos.write("\r\n".getBytes());
             for(int i=1;i<meta.getColumnCount();i++)
             {
             b = (rs.getString(i) + "\t").getBytes();
             fos.write(b);
             }
             sqlDriverQuerySaveFileSqlError = true;
             }
             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()) 
         {
         if (!display.readAndDispatch()) 
         {
         display.sleep();
         }
         }
    }

    catch (SQLException e) 
    {
    e.printStackTrace();

    finally 
    {
    if (rs != null) 
    {
    try 
    {
    rs.close();

    catch (SQLException e) 
    {
    e.printStackTrace();
    }
    }
    }
    return sqlDriverQuerySaveFileSqlError;
    }
    }
    这段代码是由点了保存按钮调用的
    DriverQuerySaveFileSqlBean dqsfsb = new DriverQuerySaveFileSqlBean();
    dqsfsb.sqlDriverQuerySaveFileSqlBeanPage();
    jsp上是这样的
    <%@ page language="java" pageEncoding="gbk"%><%@ taglib uri="/tags/struts-html" prefix="html"%>
    <%@ taglib uri="/tags/struts-bean" prefix="bean"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html:html lang="true">
    <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>
      <head>
        <html:base />
        
        <title>驾驶员查询</title> <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
            <h2>查询条件选择</h2>
        <html:errors property="errorDriverQuery"/>
    <html:form action="/DriverQuery.do" method="post">
    <html:checkbox property="driverQueryCheckBox1" value="driverQuery01">姓名</html:checkbox>
    <html:text property="driverQueryNameInput"/>
    <br>
    <html:button property="DriverQueryInsertButton" onclick="DriverQueryJavaScript('driverQueryInsertButton');">保存</html:button>
    </html:form>
      </body>
    </html:html>指点指点我吧,在我们屋任何一台机器上执行到fileName = dlg.open();//打开保存窗口这句,就在服务器上打开了
      

  10.   

    feirne2004 
    敢死队
    不知道你说的那段代码需要放到哪里,应该放带open()的前边吧?
      

  11.   

    vlinux 
    神vlinux飘飘 
    等 级:
     发表于:2008-01-19 18:53:2819楼 得分:0 
    真的不明白LZ的要求,不在服务器上打开,难道你想在客户端打开不成??!!! 
     ---------------------------------------------------------
    对,我就是这意思啊,我要把查询出来的数据保存在用户的机器上,是以文本文件的形式保存
    就比如下载一样,只不过我想要的是动态生成的数据,由用户来动态选择,用户可以保存查询出来的全部数据,或者是一页,或者是一行,我想,既然有上传用的浏览按钮,点了浏览会出个对话框,为什么保存那个对话框就不在用户机上打开,而是在服务器上打开呢??我不想要把查出来的数据先保存在服务器上,然后出个下载的对话框,如果是这样我也就不用来问了,我也不想用javascript,我只想实现那种按了保存出保存对话框的那种,就算不用swt也可以,其他的也可以呀,swt要调用jni,用户机上装些东西可以实现我要的功能,但我还是不想要用户来装任何东西,各位,有办法吗?我知道你们都是高手,我是菜鸟,请帮帮我吧,诚心诚恳的请求帮助
      

  12.   

    swt是调用JNI的,所以想要在用户机上打开对话框,那么就需要用户机上安装第三方软件了
    有个软件叫SmartSWT
    可以实现你要的功能SmartSWT简介为了提高传统WEB应用的界面表现能力,RIA技术应时而生,各种RIA平台通过各种手段来提高丰富的图形界面。如Bindows,它使用动态HTML技术模拟Windows控件,还有Flex,直接使用Flash做为WEB应用的表现层,以弥补DHTML技术的不足。而SmartSWT则是基于SWT的RIA发布平台。它可以将普通的SWT的应用直接发布成为一个可通过客户端浏览器访问的WEB应用,这样就使通过SWT直接开发 富UI的WEB应用成为了现实。不仅如此,基于SWT扩展的许多扩展包也大都可以直接使用,如JFace、GEF等。SmartSWT和SmartClient不一样,它并不是将SWT应用程序下载到客户端来运行,而是和B/S模式的WEB应用一样,整个应用程序是运行在服务端的,只是运行过程中将图形界面实时显示于客户端的浏览器中,并将客户端的操作事件自动实时返回服务端,触发服务端原SWT应用的事件处理代码进行处理。服务端的SWT应用所进行的数据库操作和文件操作都是相对于服务器端进行的,而不像C/S应用那样,需要客户端自己将数据按自定义的通讯协议传回服务端再进行处理。SmartSWT底层的通讯是加密而且高效的,在内网的客户端打开服务端的SWT应用,和原来直接在本机使用相比相差不多。相当于将您机器的CPU降一档后运行应用程序的感觉。SmartSWT目前测试版本是3.1,表示支持SWT3.1的兼容应用程序。下图是一个SWT应用(SWT Control Example)在SmartSWT平台部署后,客户端通过IE浏览器访问的效果:安装运行SmartSWT的测试版仅支持Windows系统,根据其用户手册的说明,它的服务端正式版将支持Linux、Unix等系统。SmartSWT安装运行非常简单,从www.smartswt.com下载SmartSWT31压缩包并解压,在解压目录下有三个子目录SmartSWTClient、SmartSWTServer和WEB。1. 打开SmartSWTClient目录,运行Setup.exe安装客户端,该程序将在客户端安装一个定制的小型JAVA虚拟机。2. 打开SmartSWTServer目录,运行Startup.bat,将运行SmartSWT服务端,SmartSWT使用自带的JAVA虚拟机,所以您不用预先准备它。3. 如果您的客户端和服务端都在同一台机器,则直接进入WEB子目录,用IE打开index.htm文件,大约15秒钟左右即可在IE浏览器中启动SmartSWT桌面,您这时可以通过Start菜单,启动内置的DEMO程序体验一番。开发SmartSWT应用开发SmartSWT应用基本上和开发普通的SWT应用相同。您可以使用Eclipse的SWT可视化插件来帮助创建一个SWT应用程序,比较好的有Designer及Eclipse的VisualEditor等。用于部署到SmartSWT服务器的SWT应用在开发时有些小的限制,幸好这些通常都只是举手之劳:1. Display的获取必须统一使用Display display = Display.getDefault()方法,不能使用new Deisplay()创建,SmartSWT目前尚不支持多Display的应用,对大多数应用来说这不是问题;2. 创建的Shell最好必须调用shell.setSize()对其尺寸进行初始化,否则在SmartSWT将默认呈最小化状态;3. 尽量不要使用非公开的API,因为有少量非公开API,可能SmartSWT并没有实现它;4. 尽量不要使用其它JNI技术和ActiveX控件,不要使用SWING和AWT等非基于SWT的控件;5. 避免初始化时一次创建几十上百个控件,这样会造成启动时间较长,应在需要显示时创建控件。部署SmartSWT应用SmartSWT的部署一样很简单,只需将调试通过的SWT程序的类文件,按包名目录结构原封不动拷贝至SmartSWTServer的swtapps目录,然后在SmartSWTServer.xml文件中按以下格式注册一下,最后重启SmartSWTServer,你就可以通过客户端浏览器启动SmartSWT桌面,在Start->Programs菜单里启动它:  <!-- Configuration of each SWT Application  name: the name of the SWT Application  mainClass: the main class to start the SWT Application  startup: will it start just after the smartswt desktop started(haven't supported)  description: the description of the SWT Application--><Application name="ControlExample"mainClass="org.eclipse.swt.examples.controlexample.ControlExample">    <startup>false</startup>    <description>ControlExample Application</description></Application>SmartSWT: RIA平台的强有力竞争者SmartSWT同其它RIA平台比较有一些独特的优势。首先它是基于SWT的RIA平台,依托强大的Eclipse阵营,有许多扩展技术可用,如JFace、GEF、EMF等,像UML设计器、报表、动画这样的复杂图形应用都可以通过SWT实现后,发布到SmartSWT,从而在WEB上很轻松地使用这些桌面应用独有的表现技术。还有OpenGL、RCP这类应用也有可能在将来得到支持,而且Eclipse不断发展中,SWT相关技术的不断成熟,都将以最快的速度同时运用于WEB应用。而且多年来用积累的用SWT开发的软件,不需要修改,或只需少量的修改,即可同时拥有WEB版本。其次,很多JAVA应用开发者往往只对JAVA服务端的技术感兴趣,而对表现层采用的HTML、JS、JSP这类标签语言和脚本技术并不喜欢。而事实上兼通JAVA技术、HTML和脚本技术的程序员也是少之又少。这也是造成许多传统J2EE应用的界面表现不佳的原因。由于SmartSWT直接采用了SWT,使的整个应用的开发完全是纯JAVA技术的开发过程,开发者不再需要与非面向对象的HTML、JS、JSP等标签语言和脚本技术打交道,整个开发过程完全是桌面应用的开发模式,基于事件驱动。这使得应用开发在技术人员的配备上要容易得多。此外,发布到SmartSWT的SWT应用,客户端通过浏览器使用时,仍然具有和原SWT一样的具有Windows本地风格的界面,具有和真正桌面应用一样的表现能力和事件机制,其表现能力和功能是Bindows以及Flex等技术无法真正模拟的。
    SmartSWT的局限性尽管SmartSWT有诸多好处,但也存在一些局限性。 由于技术实现的原因,对网络传输速度要求较高。SmartSWT在内网内访问时,其使用效果和本机上直接使用相差不多,但在外网上却几乎不具可用性。这决定了SmartSWT只能用于开发企业内网应用。另外,和Flex类似,Flex要求客户端的浏览器安装一个Flash ActiveX控件,SmartSWT也有类似要求。SmartSWT客户端需要在浏览器中实时表现服务端SWT应用的图形界面,并对用户操作做出响应,这就需要在客户端安装一个特制的小型JAVA虚拟机,并以ActiveX控件的形式在IE中使用。某些政府机关的敏感部门对这种方式 可能比较反感。
    选择SmartSWT,还是...是否选择SmartSWT,取决于您的软件应用范围和客户。如果您的软件是内网的企业应用,您的用户日常办公使用的是Windows系统,而且对客户端安装一个小小的虚拟机不介意的话,选择SmartSWT无疑是上佳选择 。它将使您的WEB应用开发充分享受SWT开发的各种便利性和各方的丰富技术支持,完成普通WEB无法完成的功能。SWT界面的表现力和操作便利性,也会使客户满意度大大提高。参考资料 您可以通过http://www.smartswt.net获得进一步的SmartSWT资料和试用软件。
    http://www.eclipse.org/swt/这里是Eclipse SWT的基地,可以得到最新的SWT开发包和开发资料。
    http://www.eclipse.org/上还有很多SWT相关的扩展项目,如GEF、EMF等。
    您可以通过http://www.swt-designer.com/获得SWT应用开发的可视化Eclipse插件。关于作者 黄林榕,J2EE软件工程师,多年的J2EE项目开发经验和Eclipse应用开发经验,目前从事RIA技术研究。
    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=620227
      

  13.   

    客户端没有swt,恕我孤陋寡闻,我不认为ie可以直接打开客户端上的程序,如果可以那就可以格式化客户端的硬盘,楼主你说呢,你还是换个思路吧,或者使用applet.
    或者让客户下载你写好的基于swt的小程序,就像qq与www.qq.com交互哪种.
      

  14.   

    必须得让客户机装东西而且如果没用jre非常复杂

    http://blog.csdn.net/sunyujia/archive/2008/01/20/2054006.aspx
      

  15.   

    没那么复杂吧,你把response的头设置正确了,然后response.write(),就是向客户端发送数据流,
    客户端自然就会显示保存对话框了。
      

  16.   

    tangshuo 
     
    等 级:
     发表于:2008-01-21 10:44:3024楼 得分:0 
    没那么复杂吧,你把response的头设置正确了,然后response.write(),就是向客户端发送数据流, 
    客户端自然就会显示保存对话框了。 
     -------------------------------------------------------------------------
    这个只是出现下载的那种保存框~~~我总觉得既然点浏览可以弹出那种打开的对话框,为什么我就不能弄个保存按钮调出保存的对话框呢,真让我失望啊