У меня есть два кода домена:
public class domain1{
private string domain1Name;
private List<domain2> domain2List;
/* getter setter */
}
public class domain2{
private string domain2Name;
/* getter setter */
}
, и у меня есть Spring Controller, который возвращает карту, а затем передает ее модели со следующей функцией:
@SuppressWarnings("unchecked")
@RequestMapping("preview")
public String preview(Model model) {
List<Domain1> list = new ArrayList<Domain1>();
Domain1 d1 = new Domain1();
Iterator i = someData.iterator(); //<--this function successfully retrieve data, not null guaranted.
while(i.hasNext()){
Map.Entry me = (Map.Entry)i.next();
d1 = (Domain1) me.getValue();
list.add(d1);
}
Map mapz = new HashMap();
mapz.put("domain1List", list); // first value as Domain1
mapz.put("domain2List", d1.getDomain2List()); // second value as Domain2
model.addAllAttributes(mapz);
return "test_parentreport"; <- jasper bean lookup views from views.xml
}
views.xml
<bean id="test_parentreport"
class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
p:url="/WEB-INF/jasper/test_parentreport.jrxml">
<property name="headers">
<props>
<prop key="Content-Disposition">
attachment; filename=test_parentreport.pdf
</prop>
</props>
</property>
<property name="subReportUrls">
<map>
<entry key="test_subreport" value="/WEB-INF/jasper/test_subreport.jrxml"/>
</map>
</property>
</bean>
test_parentreport.jrxml
...<field name="domain1Name" class="java.lang.String"/><detail><band height="125" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="555" height="51"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{domain1Name}]]></textFieldExpression>
</textField>
<subreport>
<reportElement positionType="Float" x="0" y="0" width="555" height="125" isPrintWhenDetailOverflows="true"/>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{test_subreport}]]></subreportExpression>
</subreport>
</band>
</detail>...
test_subreport.jrxml
...<field name="domain2Name" class="java.lang.String"/>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="71" y="13" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{domain2Name}]]></textFieldExpression>
</textField>
</band>
</detail>
<noData>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="555" height="20"/>
<textElement textAlignment="Center"/>
<text><![CDATA[NODATA ]]></text>
</staticText>
</band>
</noData>...
моя проблема:
представьте, что класс Domain1.c содержит только одинэлемент, он приносит список, который содержит 2 элемента,
-Domain1 <- я хочу заполнить это в test_parentreport.jrxml как родительский отчет --Domain2 --Domain2 <- я хочу заполнить эти два в test_subreport.jrxml </p>
когда я размещаю только 1 карту на контроллере, отчет исправляется на родительском объекте, но при вложении двух карт на контроллере НЕТ ДАННЫХ в подотчете, отчет показывает пустой как родительский, так и подчиненный отчет
я что-то упустил?пожалуйста, дайте мне понять, что идея заполнить оба родительских элемента и подчиненного отчета, используя Домен / Модель рядом с SQL-запросом, я пробую это на SQL-запросе, и родительский и вложенный отчет прекрасно работает, но он не работает, когда я изменяю его на модель.