【问题标题】:How to get a dialog box that contains the options of "open" and "save"如何获得包含“打开”和“保存”选项的对话框
【发布时间】:2016-02-22 19:19:47
【问题描述】:

我有一个要求,比如当我点击“提交”按钮时,我应该有一个包含“打开”、“保存”和“取消”等按钮的小窗口。我将显示一张图片以便更好地理解。

正如您在上面看到的那样,出现了一个弹出窗口,它询问“打开”或“保存”之类的问题。我尝试使用不同的代码,但没有得到我想要的。下面是我的代码。

searchResult3.jsp

<script type="text/javascript">
 function generateReport() {
  var e = document.getElementById("idOfYourSelectYouNeedToAddedIt");
  var strPage = e.options[e.selectedIndex].value;
  window.open(strPage);
 return false; //This make you stay on this page;
  //return true; //Set the action tag in the form to the page you like to go to!
 }
</script>

<body>
 <form name="myForm" onsubmit="return generateReport()">
                <select id = "idOfYourSelectYouNeedToAddedIt">
<option value=''> Make a selection </option>
<option value='sample2PDF.jsp'> PDF</option>
<option value='sample2XLS.jsp'> XLS </option>
<option value='sample2DOC.jsp'> DOC </option>
<option value='sample2XLSX.jsp'> XLSX </option>
</select>
<br/>

<input type="submit" value="Submit">
</form>
</body>

sampleDOC.jsp

<%@ page import="java.io.*"%> 
<%@ page import="java.sql.Connection"%> 
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
<%@ page import="net.sf.jasperreports.engine.*"%>
<%@ page import="java.io.FileNotFoundException" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.io.ByteArrayOutputStream" %>
<%@ page import="java.io.OutputStream" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %> 
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.engine.design.JRDesignQuery"%>
<%@ page import="net.sf.jasperreports.engine.xml.JRXmlLoader"%>
<%@ page import="net.sf.jasperreports.engine.design.JasperDesign"%>
<%@ page import="net.sf.jasperreports.view.JasperViewer"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JasperCompileManager"%>
<%@ page import="net.sf.jasperreports.engine.JasperExportManager"%>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JasperReport"%>
<%@ page import="net.sf.jasperreports.engine.export.ooxml.JRDocxExporter"%>
<%@ page import="javax.servlet.http.HttpServletResponse"%>;  
<%@ page trimDirectiveWhitespaces="true"%>
<html>

<body>

<%
String sql=null;
Connection conn = null;
Object o2 = session.getAttribute("email");
String email = o2.toString();
String search=(String)session.getAttribute("search");//search
String search_tf=(String)session.getAttribute("search_tf");//companyname,contactperson,phone
if((search!=null && search.trim().length()>0) && (search_tf!=null && search_tf.trim().length()>0))
{
    if(search.equals("Phone"))
    {
        sql="select * from lead where Phone like '" + search_tf.replaceAll("\\'","''") + "%' AND Email = '" + email + "'";
    }
    else if(search.equals("Contact Person"))
    {
        sql="select * from lead where Contact_Person like '" + search_tf.replaceAll("\\'","''") + "%' AND Email = '" + email + "'";
    }
    else
    {
        sql="select * from lead where Company_Name like '" + search_tf.replaceAll("\\'","''") + "%' AND Email = '" + email + "'";
    }
}
else
{
    sql="select * from lead where Email = '" + email + "'";
}
try 
{
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/marketing_database","root","root");
    String jrxmlFile ="D:/dev/tools/jasper files/report10.jrxml";
    InputStream input = new FileInputStream(new File(jrxmlFile));
    JasperDesign jasperDesign = JRXmlLoader.load(input);

    System.out.println("Compiling Report Designs");
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

    System.out.println("Creating JasperPrint Object");
    HashMap<String,Object> map = new HashMap<String,Object>();
    map.put("sql",sql);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,map,conn);
    byte bytes[] = new byte[10000]; 
    JRDocxExporter exporter = new JRDocxExporter();
    ByteArrayOutputStream DOCStream = new ByteArrayOutputStream(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, DOCStream); 
    exporter.exportReport(); 

    //System.out.println("Size of byte array:"+DOCStream.size()); 
    //bytes = DOCStream.toByteArray(); 
    String fileName = "SalesReport.doc";
    response.addHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
   //response.setHeader("Content-Disposition", "inline; filename="
//   + fileName);

    response.setContentType("application/msword"); 
    response.setContentLength(DOCStream.size()); 
    //DOCStream.close();  

    OutputStream outputStream = response.getOutputStream();  
    DOCStream.writeTo(outputStream);  
    outputStream.flush(); 
    //outputStream.close(); 

}
catch(Exception e) 
{e.printStackTrace();} 

        %>
</body>
</html>

【问题讨论】:

  • 不可能。如何处理下载完全取决于浏览器。用户可以在浏览器的配置中更改它。您可以做的一件事是在Content-Disposition 中将inline 替换为attachment,但这只会“强制”浏览器保存文件,而不是启动程序来打开它。

标签: javascript java jsp servlets


【解决方案1】:

就像@RoToRa 所说,打开/保存对话框是 Internet Explorer 的一部分,它不是你可以在任意浏览器上触发的。

但是,当 IE 认为用户正在请求文件而不是网页(或浏览器可以显示的其他资源,如图像)时,就会出现该对话框。浏览器会查看 Content-Disposition 标头作为何时显示此对话框的建议。

粗略地说,你应该提供一个

Content-Disposition: attachment; filename="SUGGESTED_FILE_NAME"

您的请求的标题以触发对话。请参阅php - How to force download of a file? 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多