如何使用Java中的集合填充Jasper表

时间:2017-06-14 13:12:45

标签: java jasper-reports

我想在Jasper报告中使用集合生成表。我有两个报表对象,FiberReport和FiberBufferReport对象。我需要基于FiberBufferReport生成表。您可以通过以下代码检查我的报告域对象,生成报告页面的控制器方法和我的“.jrxml”文件。 请帮我看看有什么问题?我怎么解决它?

FiberReport对象:

public class FiberReport {

private String name;
private String description;
private String fiberCount;
private String bron;
private String tros;
private String metalDetector;
private String facticalLength;
private String gisLength;
private String twisFactor;
private String diameter;
private String producer;
private String isList;

private List<FiberBufferReport> bufferList;

... getters and setters

我的控制器方法:

`@RequestMapping(method = RequestMethod.GET, value = "/report/{id}")
public ModelAndView generatePdfReport(@PathVariable(value = "id") Long id, ModelAndView modelAndView)
        throws JRException {

    LOG.info("--------------generate fiber PDF report----------");

    Map<String, Object> parameterMap = new HashMap<String, Object>();

    List<FiberReport> fiberReportList = new ArrayList<FiberReport>(); // datasource

    Fiber fiber = fiberService.getOne(id); // selected Fiber
    FiberReport fiberReport = new FiberReport(); // Fiber report Object

    fiberReport.setName(fiber.getCableName());
    fiberReport.setFiberCount(fiber.getFiberCount().toString());
    .... settings

    Set<Buffer> bufferList = fiber.getBuffers();
    List<FiberBufferReport> subreportList = new ArrayList<FiberBufferReport>();
    FiberBufferReport subreport = null;

    for (Buffer buffer : bufferList) {

        Set<FiberStrand> fiberStrands = buffer.getFiberStrands();

        for (FiberStrand fiberStrand : fiberStrands) {

            subreport = new FiberBufferReport();
            subreport.setBuffer_name(buffer.getName());
            subreport.setBuffer_type(buffer.getBufferType().getName());

            subreport.setStrand_name(fiberStrand.getName());
            subreport.setStrand_color(fiberStrand.getColor() != null ? fiberStrand.getColor().toString() : "");
            ..... settings

            subreportList.add(subreport);

        }

    }

    fiberReport.setBufferList(subreportList);
    fiberReportList.add(fiberReport);

    JRDataSource JRdataSourceFiber = new JRBeanCollectionDataSource(fiberReportList);
    JRDataSource JRdataSourceFiberBuffer = new JRBeanCollectionDataSource(subreportList);

    parameterMap.put("datasource", JRdataSourceFiber);
    parameterMap.put("REPORT_DATA_SOURCE", JRdataSourceFiberBuffer);

    // pdfReport bean has ben declared in the spring configuration
    modelAndView = new ModelAndView("fiberReport_PDF", parameterMap);

    return modelAndView;

}

}`

和.jrxml文件:

 .........
..........
<subDataset name="bufferList" whenResourceMissingType="Empty">
    <field name="buffer_name" class="java.lang.String"/>
    <field name="buffer_type" class="java.lang.String"/>
    <field name="strand_name" class="java.lang.String"/>
    <field name="strand_color" class="java.lang.String"/>
    <field name="strand_status" class="java.lang.String"/>
    <field name="strand_type" class="java.lang.String"/>
    <field name="strand_start" class="java.lang.String"/>
    <field name="strand_end" class="java.lang.String"/>
</subDataset>
.........
..........
<reportElement key="table 5" style="table 5" x="15" y="323" width="525" height="302"/>
            <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="bufferList">  
                    <datasetParameter name="REPORT_DATA_SOURCE">
                        <datasetParameterExpression><![CDATA[]]></datasetParameterExpression>
                    </datasetParameter> 
                    <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                </datasetRun>
                <jr:column width="90">
                    <jr:tableHeader style="table 5_TH" height="30"/>
                    <jr:columnHeader style="table 5_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="90" height="30"/>
                            <text><![CDATA[buffer_name]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:detailCell style="table 5_TD" height="20">
                        <textField>
                            <reportElement x="0" y="0" width="90" height="20"/>
                            <textFieldExpression><![CDATA[$F{buffer_name}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>

               ....... jr columns

当我运行它时,显示空表:/

提前致谢!

0 个答案:

没有答案