为jasper报告传递双参数

时间:2017-05-19 13:13:08

标签: java jasper-reports

我正在制作一个使用参数的报告: Start dateend datetype(可以是:输入,输出或输入和输出)。

一切正常,直到我尝试获取输入和输出的报告

我已经在很多方面尝试过,我无法获得结果。

报告中的查询:

enter image description here

爪哇:

protected void relEntrada(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
    SessionImplementor sim = (SessionImplementor) HibernateUtil.getSessionFactory().openSession();
    Connection con = sim.connection();

    String tipoMov = request.getParameter("tipMov");

    String dataini = request.getParameter("dataini");
    String dtini[] = dataini.split("/");
    String diai = dtini[0];
    String mesi = dtini[1];
    String anoi = dtini[2];

    String datafim = request.getParameter("datafim");
    String dtfim[] = datafim.split("/");
    String diaf = dtfim[0];
    String mesf = dtfim[1];
    String anof = dtfim[2];

    HashMap param = new HashMap();
    param.put("dataini",  anoi +"-"+mesi+"-"+diai + " 00:00:00" );
    param.put("datafim", anof +"-"+mesf+"-"+diaf + " 23:59:59" );

    if (tipoMov.equalsIgnoreCase("entrada")) {
        param.put("tipmov", "entrada" );
    } else if(tipoMov.equalsIgnoreCase("saida")) {
        param.put("tipmov", "saida" );
    } else if(tipoMov.equalsIgnoreCase("entradaesaida")) {
        param.put("tipmov", "entrada or tipo = "+'"'+"saida"+'"');
    }

    InputStream arquivo = getServletContext().getResourceAsStream("/relatorios/RelMoviment.jasper");

    byte[] pdf = JasperRunManager.runReportToPdf(arquivo, param ,con);

    ServletOutputStream out = response.getOutputStream(); 
    out.write(pdf);
    out.flush();
} catch(Exception e) {
    e.printStackTrace();
}
}

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您需要使用dynamic queries功能。

  1. 在您的查询中有:

    and he.tipo=$P!{tipmov}
    

    注意$P!语法

  2. 在您的Java代码中有:

    if (tipoMov.equalsIgnoreCase("entrada")) {
        param.put("tipmov", "'entrada'" );
    } else if(tipoMov.equalsIgnoreCase("saida")) {
        param.put("tipmov", "'saida'" );
    } else if(tipoMov.equalsIgnoreCase("entradaesaida")) {
        param.put("tipmov", "'entrada' or he.tipo='saida'");
    }
    

    注意每个参数值的单引号转义。

答案 1 :(得分:0)

但我没有打电话的一件事就是! p {} ...我永远不会按照我想要的方式或做三元组....我放了p! {}一切都很酷。