Как передать значение параметра в JasperReport из кода JSP или Java? - PullRequest
4 голосов
/ 26 марта 2012

Я успешно создал отчет и успешно экспортировал в HTML и PDF.Однако это статический отчет.У меня запрос как:

select * from personal where id= 'val' 

Я хочу отправить этот параметр "val" из Java/JSP во время выполнения.Как это сделать?

Ответы [ 3 ]

15 голосов
/ 27 марта 2012

Создайте карту, содержащую параметры и поместите параметры в качестве пары ключ-значение.

Map parametersMap = new HashMap();  
parametersMap.put("id",7);

При создании отчета Jasper из JSP:

JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport, parametersMap, jdbcConnection);

где ключи в parametersMap должны точно совпадать с параметрами, определенными в шаблоне вашего отчета.

Итак, объявите параметр в шаблоне вашего отчета (jrxml):

<parameter name="id" class="java.lang.Integer"/>

Передать параметр в запросе в отчете Jasper

select * from personal where id= $P{id}
0 голосов
/ 28 марта 2014

Это будет ваш код для 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>
0 голосов
/ 26 марта 2012

вы не можете выбрать *, вы должны указать имя столбца, из которого вы хотите получить данные. использование commDB.query, чтобы выполнить запрос, затем передать результат в commDBResult, запустить цикл, поместить каждую строку записи в список массивов, а затем использовать jasper для генерации отчета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...