如何使JasperReports在程序加载时要求一个参数?

Joh*_*ohn 0 java report jasper-reports ireport

我创建了一个加载JR报告的程序。我在报表上放置了一个参数,以便无论何时加载报表,它都会要求一个值。当我在Java程序上传递参数时,它工作正常

Map parameters = new HashMap();
parameters.put("VoucherNo", oclsJVHeader.getJournalVoucherNo()); 
...
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试不带参数加载它时,

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
Run Code Online (Sandbox Code Playgroud)

它说“该文档没有页面”。我一直在想,因为只要我的代码未传递参数,我都会使该参数使用提示符,因此在加载该参数时会询问提示符。

<parameter name="VoucherNo" class="java.lang.String" isForPrompting="true">
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,每当不传递参数时,如何使报告提示输入值?我是否需要为此更改Java代码?

顺便说一下,这是我用于加载报告的代码:

 FileInputStream fs = new FileInputStream(reportPath+reportFile);
 JasperDesign jasperDesign = JRXmlLoader.load(fs);
 JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,  conn); //could be null or parameters
 JFrame jframe = new JFrame("Journal Voucher");
 jframe.getContentPane().add(new JRViewer(jasperPrint));
 jframe.pack();
 jframe.setExtendedState(javax.swing.JFrame.MAXIMIZED_BOTH);
 jframe.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

我正在为项目使用iReportNetBeans

JB *_*zet 5

AFAIK,该isForPrompting参数仅由iReport和JasperServer使用(并且可以由生成报告的任何其他通用应用程序使用)。

无论如何,JasperReport应该如何知道应如何查询参数值?如果您的应用程序是Webapp?还是命令行应用程序?Jasper Reports生成报告。您应该提供必要的GUI。

  • 我相信这是一个反问。您可以将其解释为:“ JasperReports显然不知道如何提示参数,因为它不知道其运行的上下文。” 您需要在Swing应用程序中编写代码,以提示用户输入参数。 (4认同)