如何从JSP或Java代码在JasperReport中传递参数值?

如何从JSP或Java代码在JasperReport中传递参数值?,java,jasper-reports,Java,Jasper Reports,我已成功创建了一份报告,并成功导出到HTML和PDF。然而,它是一个静态报告。我的问题如下: select * from personal where id= 'val' 我想在运行时从Java/JSP发送这个参数“val”。如何执行此操作?您不能选择*,必须指明要从中获取数据的列名。使用 commDB.query执行查询,然后将结果传递给commDBResult,运行循环,将每一行记录放入数组列表,然后使用jasper生成报告,创建包含参数的映射,并将参数作为键值对 Map paramet

我已成功创建了一份报告,并成功导出到
HTML
PDF
。然而,它是一个静态报告。我的问题如下:

select * from personal where id= 'val' 

我想在运行时从
Java/JSP
发送这个参数“val”。如何执行此操作?

您不能选择*,必须指明要从中获取数据的列名。使用
commDB.query执行查询,然后将结果传递给commDBResult,运行循环,将每一行记录放入数组列表,然后使用jasper生成报告,创建包含参数的映射,并将参数作为键值对

Map parametersMap = new HashMap();  
parametersMap.put("id",7);
从JSP生成Jasper报告时:

JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport, parametersMap, jdbcConnection);
其中,
parametersMap
中的键应与报告模板中定义的参数完全相同

因此,在报告模板(jrxml)中声明参数:


这将是您的jsp代码

<%@page import="net.sf.jasperreports.engine.JasperExportManager"%>
<%@page import="net.sf.jasperreports.engine.JasperExportManager"%>
<%@page import="net.sf.jasperreports.view.JasperViewer"%>
<%@page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@page import="net.sf.jasperreports.engine.JasperReport"%>
<%@page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@page import="net.sf.jasperreports.engine.JRResultSetDataSource"%>
<%@page import="net.sf.jasperreports.engine.JasperCompileManager"%>
<%@page import="net.sf.jasperreports.*"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
<%
           try
           {
       JasperReport jasperReport=JasperCompileManager.compileReport("PASS LOCATION TO YOUR .JRXML FILE");
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn =   DriverManager.getConnection("jdbc:mysql://localhost:3306/t_fleet" , "root", "root");
        Integer inv_no=0;
        Statement stmt = null;
        ResultSet rset = null;
        Statement st2=conn.createStatement();
        String queryString = "PASS YOUR QUERY HERE";
        stmt = conn.createStatement();
        rset = stmt.executeQuery(queryString);
        JRResultSetDataSource jasperReports = new JRResultSetDataSource(rset);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null, jasperReports);
        //JasperViewer.viewReport(jasperPrint); 

        String filename=null;
        filename="SET NAME TO YOUR FILE NAME AND APPEND.pdf TO IT";

        //Report saved in specified path
        JasperExportManager.exportReportToPdfFile(jasperPrint,filename);

        //Report open in Runtime
        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " +filename);
       }
       catch(Exception e)
       {
           out.println(e);
       }
    %>

    </body>
    <script>

     </script>
</html>

JSP页面

谢谢。我已成功生成报告。我面临的问题是我的报告是静态的。我想要一份动态报告。这意味着我想从jsp/java中输入id的值(例如),它会更改查询并生成相应的报告。谢谢。问题现在解决了。我只想再问一件事。假设我想在jasper报告中打印参数$P{id}。(现在我们正在查询中使用它。)。我只想打印报告中的参数。有可能吗。。是的。请帮忙。如果你的问题解决了,你应该将问题标记为已回答。在i-Report中,选择要打印的部分。定义一个字段$F{id}。顺便说一句,这是另一个问题。:)也许用更新jasperreport报告所需的参数调用服务层是更好的编程模式,这就是为什么我对你的帖子投了反对票。
select * from personal where id= $P{id}
<%@page import="net.sf.jasperreports.engine.JasperExportManager"%>
<%@page import="net.sf.jasperreports.engine.JasperExportManager"%>
<%@page import="net.sf.jasperreports.view.JasperViewer"%>
<%@page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@page import="net.sf.jasperreports.engine.JasperReport"%>
<%@page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@page import="net.sf.jasperreports.engine.JRResultSetDataSource"%>
<%@page import="net.sf.jasperreports.engine.JasperCompileManager"%>
<%@page import="net.sf.jasperreports.*"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
<%
           try
           {
       JasperReport jasperReport=JasperCompileManager.compileReport("PASS LOCATION TO YOUR .JRXML FILE");
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn =   DriverManager.getConnection("jdbc:mysql://localhost:3306/t_fleet" , "root", "root");
        Integer inv_no=0;
        Statement stmt = null;
        ResultSet rset = null;
        Statement st2=conn.createStatement();
        String queryString = "PASS YOUR QUERY HERE";
        stmt = conn.createStatement();
        rset = stmt.executeQuery(queryString);
        JRResultSetDataSource jasperReports = new JRResultSetDataSource(rset);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null, jasperReports);
        //JasperViewer.viewReport(jasperPrint); 

        String filename=null;
        filename="SET NAME TO YOUR FILE NAME AND APPEND.pdf TO IT";

        //Report saved in specified path
        JasperExportManager.exportReportToPdfFile(jasperPrint,filename);

        //Report open in Runtime
        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " +filename);
       }
       catch(Exception e)
       {
           out.println(e);
       }
    %>

    </body>
    <script>

     </script>
</html>