2010-11-25 23 views
0

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.

Répondre

0

Vous pourriez trouver quelques indices en vérifiant mes tutoriels pour le printemps 3 MVC et Jasper:

J'ai fourni une version téléchargeable Maven. Les tutoriels sont très détaillés. De plus, l'application elle-même est bien commentée. Il suffit de laisser un commentaire si les tutoriels vous aider :)

http://krams915.blogspot.com/p/tutorials.html