Кому-нибудь удалось напечатать ArrayList в Javabean в Struts с использованием отчетов Jasper 4.5.0
В моем тестовом примере я использую коллекцию в качестве поля и передаю ее в качестве набора данных, используя _THIS Iудалось напечатать массив строк в моем Javabean ...
Согласно Jasper : специальное сопоставление полей может использоваться для доступа к самому текущему объекту JavaBean.Таким образом, когда поле использует _THIS в качестве описания или имени, источник данных вернет текущий объект JavaBean в качестве значения поля.
<field name="facilities" class="java.util.Collection">
<fieldDescription><![CDATA[facilities]]></fieldDescription>
</field>
, где поддатой является:
<subDataset name="facilities Dataset">
<field name="facility" class="java.lang.String">
<fieldDescription><![CDATA[_THIS]]></fieldDescription>
</field>
</subDataset>
, чтобы напечатать список строк с использованием listComponent, который я использую
<c:list xmlns:c="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal">
<datasetRun subDataset="facilities Dataset">
<dataSourceExpression><![CDATA[$F{facilities}]]></dataSourceExpression>
</datasetRun>
<c:listContents height="10" width="180">
<frame>
<reportElement positionType="Float" x="0" y="0" width="180" height="10"/>
<textField isStretchWithOverflow="true">
<reportElement style="ListComp" x="0" y="0" width="180" height="10"/>
<textElement textAlignment="Left" markup="html"/>
<textFieldExpression class="java.lang.String"><![CDATA["<li>" +$F{facility} +"</li>"]]></textFieldExpression>
</textField>
</frame>
</c:listContents>
Для структур я заменил класс Collection в своем поле на
org.apache.struts2.views.jasperreports.ValueStackDataSource
Хотя он выводит правильное количество строк в массиве, значение, которое выводится, равно нулю.