【问题标题】:vaadin servlet call by buttonvaadin servlet 通过按钮调用
【发布时间】:2015-05-25 19:35:10
【问题描述】:

有谁知道我如何在单击按钮时调用HttpServletVaadinServlet

UI 的 URL 是 localhost:8181/OnlineAccounting/ 我可以通过手动输入 URL localhost:8181/OnlineAccounting/download 来调用 servlet,但我想通过单击按钮来实现它。

package com.example.Reports;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.view.JasperViewer;

import com.example.Connection.Connect;
import com.vaadin.server.VaadinServlet;

@WebServlet("download")
public class download extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public download() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


            Connect c=new Connect("{Call chartofaccounts()}", null);

            JRResultSetDataSource DataSet=new JRResultSetDataSource(c.rs);
            try{
            JasperReport JReport=JasperCompileManager.compileReport("C:\\Users\\mrreh_000\\Desktop\\Jasperreport\\MyReports\\Blank_A4_2.jasper");
            JasperPrint jprint;
            jprint = JasperFillManager.fillReport(JReport,null,DataSet);
            JasperViewer.viewReport(jprint,false);

    /// String source="C:\\Users\\mrreh_000\\Desktop\\Jasperreport\\MyReports\\Blank_A4.jrxml";
        //String query="{Call chartofaccounts()}";
          //      JReporting jReporting=new JReporting(source,query);

            String serverHomeDir = System.getenv("CATALINA_HOME");
            String reportDestination = serverHomeDir +"\\report.pdf";
            JasperExportManager.exportReportToPdfFile(jprint, reportDestination);

            FileInputStream fis = new FileInputStream(new File(reportDestination));

            // Fast way to copy a bytearray from InputStream to OutputStream
            org.apache.commons.io.IOUtils.copy(fis, response.getOutputStream());
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "attachment; filename=" + reportDestination);
            response.flushBuffer();
            }catch(Exception e){System.out.println(e);}
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

【问题讨论】:

    标签: java servlets vaadin vaadin7


    【解决方案1】:

    Herestackexchange 上的类似问题。

    我建议您在报告文件名(或报告路径)中也添加一个随机部分,否则当报告已经从以前的下载中缓存时,网络浏览器将不会重新下载报告。

    【讨论】:

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