je code à deux de domaine:Spring Jasper Intégration avec le parent et sous rapport à l'aide du modèle à côté de requêtes SQL
public class domain1{
private string domain1Name;
private List<domain2> domain2List;
/* getter setter */
}
public class domain2{
private string domain2Name;
/* getter setter */
}
et j'ai un contrôleur de ressort de rappel une carte passe alors au modèle avec la fonction suivante:
@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>...
mon problème sont:
imaginer Domain1.class ne contient qu'un seul élément, il apporte liste qui contient 2 éléments,
-Domain1 < - - Je veux remplir ceci sur test_parentreport.jrxml comme parent rapport --Domain2 --Domain2 < - je veux quand je mets seulement 1 carte sur le contrôleur, le rapport worksfine sur le parent, mais retourne NO DATA sur le sous-rapport quand je mets deux cartes sur le contrôleur, le rapport affiche vide parent et sous-rapport
ai-je oublié quelque chose? s'il vous plaît veuillez me donner un indice l'idée est de remplir à la fois parent et sous-rapport en utilisant Domain/Model à côté de SQL Query, j'essaie cela sur SQL Query parent et sous-rapport fonctionne bien, mais c'est brisé quand je le change en un modèle.