我想在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
当我运行它时,显示空表:/
提前致谢!