Creating Subreport within list in iReport

爷,独闯天下 提交于 2019-11-28 12:45:13

With information given this would be the answer.

Main bean (your goals?), containing List of other bean (SubBean).

public class Bean {
  private String var1;
  private List<SubBean> subBeans;
  public String getVar1() {
    return var1;
  }
  public void setVar1(String var1) {
    this.var1 = var1;
  }
  public List<SubBean> getSubBeans() {
    return subBeans;
  }
  public void setSubBeans(List<SubBean> subBean) {
    this.subBeans = subBean;
  }
}

Sub bean

public class SubBean {
  private String var2;
  public SubBean(String var2){
    this.var2 = var2;
  }
  public String getVar2() {
    return var2;
  }
  public void setVar2(String var2) {
    this.var2 = var2;
  }
}

How to pass the SubBean List to a subreport.

  1. You need the field subBeans in you main report.

    <field name="subBeans" class="java.util.List"/>
    
  2. I suggest that you pass the location of the .jasper file as a parameter (Note jasper report needs absolute path) es. in main report

    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"/>
    

and in java pass it (in example sub folder "jasper" in working directory is the location of the subreport.jasper)

paramMap.put("SUBREPORT_DIR", new File("jasper").getAbsolutePath() + File.separator);
  1. Now just call your subreport (needs to be complied into .jasper) from main report like this.

    <subreport>
      <reportElement x="105" y="4" width="400" height="100"/>
      <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subBeans})]]></dataSourceExpression>
      <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]></subreportExpression>
    </subreport>
    

Hence:

I'm creating a new JRDataSource for the sub report passing the List of SubBean in the current Bean

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subBeans})

indicating the absolute location of the compiled subreport.jasper

$P{SUBREPORT_DIR} + "subreport.jasper"

so now in your subreport you can use the field: var2 of the SubBean, just define it like this in the subreport.jrxml

<field name="var2" class="java.lang.String"/>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!