当前位置: 首页 > 知识库问答 >
问题:

如何将ArrayList传递给jasper报表

云和惬
2023-03-14

我想使用不同项目的jasper报告生成一个账单。为此,我定义了一些字符串数组,希望在账单中显示为项目列表。

我填写jasper报告的代码如下

System.out.println("In printing servlet");
        String [] prod = request.getParameterValues("prodn[]");
        String [] pkgdate = request.getParameterValues("pkgdate[]");
        String [] manufact = request.getParameterValues("manufact[]");
        String [] exp = request.getParameterValues("exp[]");
        String [] batch = request.getParameterValues("batch[]");
        String [] unit = request.getParameterValues("unit[]");
        String [] qty = request.getParameterValues("qty[]");
        String [] subtot = request.getParameterValues("subtot[]");
        ArrayList<String> prodname = new ArrayList<String>();
        ArrayList<String> packagedate = new ArrayList<String>();
        ArrayList<String> manufactdate = new ArrayList<String>();
        ArrayList<String> exipry = new ArrayList<String>();
        ArrayList<String> batchno = new ArrayList<String>();
        ArrayList<String> unitprice = new ArrayList<String>();
        ArrayList<String> quantity = new ArrayList<String>();
        ArrayList<String> Subtotal = new ArrayList<String>();
        Map<String, Object> param = new HashMap<String, Object>();
        try {
        JasperPrint jasperPrint =null;
        InputStream is=this.getClass().getResourceAsStream("/com/medicam/servlets/Invoice.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(is);
        for(int i=0;i<prod.length;i++)
        {
            prodname.add(prod[i]);
            packagedate.add(pkgdate[i]);
            manufactdate.add(manufact[i]);
            exipry.add(exp[i]);
            batchno.add(batch[i]);
            unitprice.add(unit[i]);
            quantity.add(qty[i]);
            Subtotal.add(subtot[i]);
            System.out.println("Name :"+prod[i]+" Pkg date: "+pkgdate[i]+"Man :"+manufact[i]+" Expi: "+exp[i]+" Batch: "+batch[i]+" Unit: "+unit[i]+" Quan: "+qty[i]+" Sub:"+subtot[i]);
        }   
        param.put("prodname", String.valueOf(prodname));
        param.put("pkgdate", String.valueOf(packagedate));
        param.put("manfdate", String.valueOf(manufactdate));
        param.put("expdate", String.valueOf(exipry));
        param.put("batch", String.valueOf(batchno));
        param.put("unit", String.valueOf(unitprice));
        param.put("qty", String.valueOf(quantity));
        param.put("subtot", String.valueOf(Subtotal));
        jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());
        JasperViewer.viewReport(jasperPrint, false);
            } 
        catch (Exception e) {
                e.printStackTrace();
            } 

Sling数组用于填充ArrayList,这些ArrayList被传递到HashMap以填充我的报告。HasMap键是在文件中声明Invoice.jrxml参数名称。参数名称被赋予如下文本文件

<textField>
                <reportElement x="-1" y="60" width="80" height="101" uuid="06fab25e-d80f-4535-8d85-1bea04dfca84"/>
                <textElement textAlignment="Center"/>
                <textFieldExpression><![CDATA[$P{prodname}]]></textFieldExpression>
            </textField>

我想打印项目列表,但我得到的输出是单行逗号分隔值。

此处为示例输出,下图为示例输出。

共有2个答案

弘烨烁
2023-03-14

我相信String.valueOf()将返回一个分隔的字符串数组。

如果你使用的是contentvalue(我更熟悉的东西),答案应该在你的put行中。

Yours:  I assume this is supposed to fill para with all the values of prodname into prodname
param.put("prodname", String.valueOf(prodname));

你的prodname键将以x,y,z结束,有趣的东西,你好吗,....

然后,当您下一次将prodname作为字符串输出时,您将获得分隔的字符串。

所以我这样做的方式,我认为它与哈希图以及内容值一起工作只是扩展了这些。您需要首先创建一个临时hashmap数组

    ArrayList<Map <string, object>> BuildMe;   // For me these are ArrayList<ContentValues>
    Map <String, Object> addMe;   // Again for me this is just ContentValues addMe; so I hope ive got the syntax correct
    for(int i=0;i<prod.length;i++)
    {
        addMe = new Map<String,Object>;
        addMe.add(prod[I]);
        ...
        BuildMe.add(addMe);
        System.out.println("Name :"+prod[i]+" Pkg date: "+pkgdate[i]+"Man :"+manufact[i]+" Expi: "+exp[i]+" Batch: "+batch[i]+" Unit: "+unit[i]+" Quan: "+qty[i]+" Sub:"+subtot[i]);
    }  

当你完成的时候,你会得到一个包含所有prod hashmaps的数组列表。然后你可以随心所欲地浏览它们,并按照你喜欢的方式打印和格式化它们。

陈德泽
2023-03-14

您可以将ArrayList传递给Jasper Report,就像将字符串传递给Jasper Report一样。

param.put("list",listObject);
 类似资料:
  • 我一直试图从一个对象数组填充一个JTable,但是什么也没有显示出来。下面是填充表的方法代码。system.out.println使我能够检查数据是否正确传递,变量中是否有值。这是来自界面的: 即使来自接口的数据显示在控制台中,也只显示表头。如果有人能解决如何正确地将数据值传递给JTable,那就太棒了!

  • 问题内容: 基本上我有一个ArrayList的位置: 在此之下,我调用以下方法: getMap()方法中的参数为: 我遇到的问题是我不确定如何在整个方法列表中传递该方法。 我试过了 但是getMap不接受,因为它不接受Objects []。 现在,如果我使用 它会完美地工作…但是我需要以某种方式传递所有位置…我当然可以继续添加等等,但是数组的大小会有所不同。我只是不习惯整个概念 最简单的方法是什么

  • 问题内容: 我有主片段,我想传递给类,在这里我将在ListView中显示结果。 片段类: 我有资料 现在,我想将“ allStudents”对象发送到新的活动类StudentResult();中。 我在片段类中使用: 在目标类中显示ListView()中的对象; 提前致谢! 问题答案: 在您的Fragment中创建一个自定义界面: 在您的活动中实现此接口: 现在,您必须重写声明的方法(在中): 然

  • 问题内容: 我想将我域的任意对象(例如Person)作为参数传递给.jrxml。 在.jrxml上执行以下操作: 这样的事情可能吗?在哪里可以找到更复杂的教程,这些教程不仅显示传递java.lang.String的内容,还显示更多的内容? 谢谢 问题答案: 是的,您可以传递任何Java对象,但应确保将其导入JRXML。 在jasperReport标记内。您可以使用标记,例如: 但是,您可以使用对象