如果是浏览器的话应该是属于客户端的,如果你说的是客户端打开了服务器端的浏览器那可就奇怪了
恕我寡闻了,从未听说过这种现象
不清楚你所说的对话框是不是指浏览器,是的话用confirm应该能解决先把这个解决了,保存路径也许自然就解决了
恕我寡闻了,从未听说过这种现象
不清楚你所说的对话框是不是指浏览器,是的话用confirm应该能解决先把这个解决了,保存路径也许自然就解决了
解决方案 »
- 关于java.lang.NullPointerException
- 求好人帮忙,要钱的就别看了,在线等
- XML:用org.w3c.dom取xml文档的节点属性值,如何做到?
- 这问题不知道怎么描述!大家来看看咯!很简单的!!
- java最基础的问题?
- structs2配置文件中返回success成功后,怎么让重定向的文件是可变的???
- EJB如何引用外部的jar包?
- hibernate一对多双向关联到问题!!!
- websphere配置数据源已经成功,怎么样用jsp或者servlet连接数据库,在线等待
- 关于jbuilder 8.0 的问题 请各位大侠帮帮我这个菜鸟吧(大分等着你来拿)
- getHibernateTemplate().save 不能写入数据
- JavaBean中为何要有一个无参的构造方法呢?
是在客户端按了保存却打开了服务器上的保存的对话框
就好比在现在这个页面,点文件->另存为的那种保存对话框,不是在客户端打开的,而是在服务器上打开了不清楚你所说的对话框是不是指浏览器,是的话用confirm应该能解决
对话框不是浏览器,是浏览器调用的SWT中的方法
这到底是因为什么原因呀
是不是因为我把这个保存功能写到后台的原因呀?保存功能要写到jsp页面上?
还是在后台需要用到response啊,我的保存功能不是在一个servlet里
还是需要在jsp上设置什么头文件呀?
帮帮忙好吗,哪怕给些思路也好
我真的没办法了
你可以先将其他处理注释掉,只关注调用swt弹窗口
或者可以先不用jsp调用,直接想办法让swt窗口弹出来,看看不经过jsp的窗口能否在客户端弹出,
先保证这一点再看jsp与swt的衔接是否有问题只能给你提供一些解决问题的办法,我还会继续关注的
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();
}
响应头header
这样做,肯定没错
我刚才把我保存功能全给提取出来了,放到另外一个项目里了
正在启动,单步测试一下,一会我给报告结果
我在登陆的过程中调用了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();//打开保存窗口这句,就在服务器上打开了
敢死队
不知道你说的那段代码需要放到哪里,应该放带open()的前边吧?
神vlinux飘飘
等 级:
发表于:2008-01-19 18:53:2819楼 得分:0
真的不明白LZ的要求,不在服务器上打开,难道你想在客户端打开不成??!!!
---------------------------------------------------------
对,我就是这意思啊,我要把查询出来的数据保存在用户的机器上,是以文本文件的形式保存
就比如下载一样,只不过我想要的是动态生成的数据,由用户来动态选择,用户可以保存查询出来的全部数据,或者是一页,或者是一行,我想,既然有上传用的浏览按钮,点了浏览会出个对话框,为什么保存那个对话框就不在用户机上打开,而是在服务器上打开呢??我不想要把查出来的数据先保存在服务器上,然后出个下载的对话框,如果是这样我也就不用来问了,我也不想用javascript,我只想实现那种按了保存出保存对话框的那种,就算不用swt也可以,其他的也可以呀,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
或者让客户下载你写好的基于swt的小程序,就像qq与www.qq.com交互哪种.
参
http://blog.csdn.net/sunyujia/archive/2008/01/20/2054006.aspx
客户端自然就会显示保存对话框了。
等 级:
发表于:2008-01-21 10:44:3024楼 得分:0
没那么复杂吧,你把response的头设置正确了,然后response.write(),就是向客户端发送数据流,
客户端自然就会显示保存对话框了。
-------------------------------------------------------------------------
这个只是出现下载的那种保存框~~~我总觉得既然点浏览可以弹出那种打开的对话框,为什么我就不能弄个保存按钮调出保存的对话框呢,真让我失望啊