当前位置: 首页 > 面试题库 >

如何使用jsp避免不显示“没有输入源提供给导出器”来显示excel。

上官迪
2023-03-14
问题内容

我已经编写了一些代码来在网站上显示excel。

但是我得到了这个例外

net.sf.jasperreports.engine.JRRuntimeException:没有输入源提供给导出器。

在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.ByteArrayOutputStream"%>
<%@ page import="net.sf.jasperreports.view.JasperViewer"%>
<%@ page import="net.sf.jasperreports.engine.export.*"%>

jsp代码导出到excel

        <%
        Connection conn = null;
        String no1 = request.getParameter("no1");
        String no2 = request.getParameter("no2");

        System.out.println("get value " + no1 + " " +no2);
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ams2"
                                                ,"root","passwd1234");
            File reportFile = new File (application.getRealPath("//jasper//report//Blank_A4_2.jasper"));
            Map parameters = new HashMap();

            parameters.put("no1",no1);
            parameters.put("no2",no2);
            System.out.println("123 "+parameters);

            ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
            JRXlsExporter exporter = new JRXlsExporter();
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, xlsReport);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, "C:\\");
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "sample.xls");
            exporter.exportReport();

            byte bytes[] = new byte[10];
            bytes = xlsReport.toByteArray();
            response.setContentType("application/vnd.ms-excel");

            response.setContentLength(bytes.length);
            xlsReport.close();
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes,0,bytes.length);
            outStream.flush();
            outStream.close();

        } catch (Exception ex) {
            out.println("Error " + ex);
        }
    %>

如何解决?


问题答案:

如果您使用的不是JasperReports的旧版本,则使用不推荐使用的方法,最重要的是,您不会将其传递JasperPrint给导出器。

没有输入源提供给出口商。

您需要 填写报告 ,使用JasperFillManager.fillReport

示例代码(碧玉报告v5或更高版本)

JasperDesign jasperDesign = JRXmlLoader.load(new FileInputStream(reportFile));
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperDesign, parameters, conn);

JRXlsExporter exporter = new JRXlsExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); //The JasperPrint, filled report
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(xlsReport)); //Your ByteArrayOutputStream

SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
configuration.setOnePagePerSheet(true);
configuration.setDetectCellType(true);
configuration.set //The other properties you like to set
exporter.setConfiguration(configuration);

exporter.exportReport();


 类似资料:
  • 问题是“要求用户输入2个正整数,打印这两个正整数之间的所有素数,每行5个素数,然后打印总数。” 我没有看到我的代码的任何输出。谢谢在这里输入图像描述

  • 问题内容: 我使用命令:运行docker图像,但它不显示颜色输出。如果我还是再次运行,则输出将正确地以彩色输出。 重击提示图像 我的bash_profile和bash_prompt 问题答案: 该OP SolomonT报道称,有做的工作: 和费尔南多·科雷亚增加的评论: 为了同时获得色彩支持和工作,我结合了两个示例: 正如chepner所评论(较早的回答)那样,由于是由调用的,因此是来源(属于交互

  • 我正在使用 iframe 并在主页中创建四个框架.jsp就像这样...... 还有菜单。jsp,其中包含4个链接,当我单击一个链接并在href标记中时,我正在调用该操作(在struts.xml中定义),该操作正在调用一个类,该类正在返回一些数据,并在SUCCESS上转发给CUSTOMERMAIN。jsp文件,但由于iframe,它没有显示任何jsp文件。 如果我不使用iFramework…它工作正

  • 问题内容: 我正在尝试请求权限以获取用户的当前位置。 我的日志记录表明,在查询时,我的应用当前没有此权限,但是在不调用任何内容时,则显示。 我的Google地图代码(实现和)位于中。 我设法使该功能在该应用程序的其他“活动”中成功运行,这只是带有Google地图的功能。将其放在或中的方法中(它需要去的地方),该方法不起作用。 有任何想法吗?这与我的Activity的类()有关,还是与Google地

  • 问题内容: 例如,我有要显示表单输入错误的表单。 如果有一些错误,我需要在输入标签附近显示红色徽章(带有“悬停显示错误”)。如果用户将鼠标悬停在红色徽章上,他将使用AngularJS UI Bootstrap工具提示 查看错误列表。我不想将错误列表放到tooltip-html-unsafe属性中,因为它不方便编辑和维护。 此代码更具声明性: 比这段代码: 如何使用AngularJS UI Boot

  • gdb在退出时会提示: A debugging session is active. Inferior 1 [process 29686 ] will be killed. Quit anyway? (y or n) n 如果不想显示这个信息,则可以在gdb中使用如下命令把提示信息关掉: (gdb) set confirm off 也可以把这个命令加到.gdbinit文件里。