2010-09-03 6 views
3

J'ai un rapport jasper simple qui n'a pas besoin d'une source de données, donc j'utilise un JREmptyDataSource. Il ne repose que sur une carte de paramètre qui est utilisé pour remplir le rapportAjouter une carte de paramètres sur Jasperreport à Spring MVC

<?xml version="1.0"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net....> 

<parameter name="param1" class="java.lang.String"/> 
<parameter name="param2" class="java.lang.String"/> 
    <detail> 
     <band height="35"> 
      <staticText> 
       <reportElement x="20" y="0" width="115" height="30"/> 
       <text> 
        <![CDATA[Parameter Values:]]> 
       </text> 
      </staticText> 
      <textField> 
       <reportElement x="135" y="11" width="100" height="19"/> 
       <textFieldExpression> 
        <![CDATA[$P{param1}]]> 
       </textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="250" y="11" width="100" height="19"/> 
       <textFieldExpression> 
        <![CDATA[$P{param2}]]> 
       </textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

Mon problème est, je ne peux pas trouver un lien sur la façon d'envoyer la carte de paramètres dans mon contrôleur de modèle de ressort. Pour la source de données, selon les docs de printemps , il suffit d'ajouter l'attribut de source de données sur la carte modèle que j'ai déjà fait, puis ajouter l'objet JREmptyDataSource

Mais qu'en est-il de la carte de paramètres? Quel nom d'attribut puis-je utiliser pour remplir mon rapport en conséquence?

public ModelAndView generateReport(HttpServletRequest request, 
    HttpServletResponse response) { 
    Map model = new HashMap(); 

    model.put("datasource", new JREmptyDataSource()); 
    //how to send the parameter map? 

    return new ModelAndView("report", model); 
} 

Dans le remplissage habituel en utilisant seulement une servlet, j'ai trouvé une ressource sur le net qui fait comme ceci. Comment puis-je envoyer la carte des paramètres dans le cas du ressort mvc?

protected void doGet(HttpServletRequest request, HttpServletResponse 
    response)throws ServletException, IOException 
{ 
    ServletOutputStream servletOutputStream = response.getOutputStream(); 
    InputStream reportStream = getServletConfig().getServletContext() 
     .getResourceAsStream("/reports/reports.jasper"); 
    HashMap parameterMap = new HashMap(); 
    parameterMap.put("paramName", "paramValue"); 
    try 
    { 
     JasperRunManager.runReportToPdfStream(reportStream, 
      servletOutputStream, parameterMap, new JREmptyDataSource()); 
     response.setContentType("application/pdf"); 
     servletOutputStream.flush(); 
     servletOutputStream.close(); 
    }catch(Exception e){ 
    } 
} 

Des pensées s'il vous plaît?

Répondre

2

En examinant ce page, vous traitez la hashmap que vous utilisez pour transmettre la source de données en tant que carte de paramètres en ajoutant les paramètres comme d'habitude et passez la carte comme ci-dessous.

Map model = new HashMap(); 
model.put("paramName", paramValue); 
return new ModelAndView("report.name", model); 
+0

. Merci encore pour votre aide. Vraiment l'apprécier =). Je vais essayer votre suggestion plus tard. J'ai juste besoin de dormir pendant quelques heures. Je vous ferai savoir plus tard le résultat, après avoir essayé cela. Merci encore Monsieur ... –

+0

Avoir déjà testé cela et cela fonctionne comme un charme ... Merci encore pour votre aide .. =) –

+0

@Mark, pas de problème du tout. Heureux de vous aider. – Gordon

Questions connexes