Boa Noite pessoal…
estudando um exemplo retirado aqui do guj, estou tentando rodar um ireport com array, para utilizar essa metodologia no meu sistema… porem meu relário não carrega o sub e eu não sei mais o que fazer…
abaixo segue tudo que fiz, se alguem puder me ajudar…
rel_1.jasper
rel_2.jasper
NomeDataSource.java
GerarDadosFicticios.java
GerarRel.java
Nome.java
Cargo.java
rel_1.jasper
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="re_1"
columnCount="1"
printOrder="Vertical"
orientation="Portrait"
pageWidth="595"
pageHeight="842"
columnWidth="535"
columnSpacing="0"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="NoPages"
isTitleNewPage="false"
isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<parameter name="pathSubRel" isForPrompting="false" class="java.lang.String"/>
<field name="nome" class="java.lang.String"/>
<field name="sobrenome" class="java.lang.String"/>
<field name="Listaemprego" class="java.lang.Object"/>
<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="0" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="0" isSplitAllowed="true" >
</band>
</pageHeader>
<columnHeader>
<band height="20" isSplitAllowed="true" >
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="0"
width="100"
height="18"
key="textField"/>
<box></box>
<textElement>
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="100"
y="0"
width="100"
height="18"
key="textField"/>
<box></box>
<textElement>
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{sobrenome}]]></textFieldExpression>
</textField>
</band>
</columnHeader>
<detail>
<band height="257" isSplitAllowed="true" >
<subreport isUsingCache="true">
<reportElement
x="0"
y="0"
width="535"
height="42"
key="subreport-1"/>
<subreportParameter name="Listaemprego">
<subreportParameterExpression><![CDATA[$F{Listaemprego}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[$F{Listaemprego}]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{pathSubRel}]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="0" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="0" isSplitAllowed="true" >
</band>
</pageFooter>
<summary>
<band height="0" isSplitAllowed="true" >
</band>
</summary>
</jasperReport>
rel_2.jasper
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="re_2"
columnCount="1"
printOrder="Vertical"
orientation="Portrait"
pageWidth="595"
pageHeight="842"
columnWidth="535"
columnSpacing="0"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="NoPages"
isTitleNewPage="false"
isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<field name="emprego" class="java.lang.String"/>
<field name="salario" class="java.lang.Integer"/>
<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="0" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="0" isSplitAllowed="true" >
</band>
</pageHeader>
<columnHeader>
<band height="0" isSplitAllowed="true" >
</band>
</columnHeader>
<detail>
<band height="43" isSplitAllowed="true" >
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="0"
y="22"
width="100"
height="18"
key="textField"/>
<box></box>
<textElement>
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{emprego}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="100"
y="22"
width="100"
height="18"
key="textField"/>
<box></box>
<textElement>
<font/>
</textElement>
<textFieldExpression class="java.lang.Integer"><![CDATA[$F{salario}]]></textFieldExpression>
</textField>
<staticText>
<reportElement
x="0"
y="2"
width="101"
height="18"
key="staticText-1"/>
<box></box>
<textElement>
<font/>
</textElement>
<text><![CDATA[Emprego]]></text>
</staticText>
<staticText>
<reportElement
x="100"
y="2"
width="101"
height="18"
key="staticText-2"/>
<box></box>
<textElement>
<font/>
</textElement>
<text><![CDATA[Salario]]></text>
</staticText>
</band>
</detail>
<columnFooter>
<band height="0" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="0" isSplitAllowed="true" >
</band>
</pageFooter>
<summary>
<band height="0" isSplitAllowed="true" >
</band>
</summary>
</jasperReport>
NomeDataSource.java
package jasper;
import java.util.Iterator;
import java.util.List;
import vo.Nome;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class NomeDataSource implements JRDataSource {
private Iterator<?> itrNome;
private Object valorAtual;
private boolean irParaProximoAluno = true;
public NomeDataSource(List<?> lista) {
super();
this.itrNome = lista.iterator();
}
public boolean next() throws JRException {
valorAtual = itrNome.hasNext() ? itrNome.next() : null;
irParaProximoAluno = (valorAtual != null);
return irParaProximoAluno;
}
public Object getFieldValue(JRField campo) throws JRException {
Object valor = null;
Nome nome = (Nome) valorAtual;
if ("nome".equals(campo.getName())) {
valor = nome.getNome();
} else if ("sobrenome".equals(campo.getName())) {
valor = nome.getSobrenome();
} else if ("ListaCargo".equals(campo.getName())){
valor = new JRBeanCollectionDataSource(nome.getListaCargo());
}
return valor;
}
}
GerarDadosFicticios.java
package jasper;
import java.util.ArrayList;
import vo.Cargo;
import vo.Nome;
public class GerarDadosFicticios {
public static ArrayList<Nome> getListaNomes() {
ArrayList<Nome> listaNome = new ArrayList<Nome>();
ArrayList<Cargo> cargo = null;
Cargo em1 = null;
Cargo em2 = null;
Cargo em3 = null;
em1 = new Cargo("desenvolvedor", "7000");
em2 = new Cargo("desenvolvedor", "5000");
em3 = new Cargo("desenvolvedor", "3000");
cargo = new ArrayList<Cargo>();
cargo.add(em1);
cargo.add(em2);
cargo.add(em3);
Nome rodrigo = new Nome("Rodrigo", "Furlan", cargo);
listaNome.add(rodrigo);
return listaNome;
}
}
GerarRel.java
package jasper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class GerarRel {
private static final String rel1 = "re_1.jasper";
private static final String rel2 = "jasper/re_2.jasper";
@SuppressWarnings({ "unchecked", "deprecation" })
public GerarRel() throws Exception {
ArrayList listaNomes = GerarDadosFicticios.getListaNomes();
NomeDataSource ds = new NomeDataSource(listaNomes);
Map parametros = new HashMap();
parametros.put("pathSubRel",rel2);
JasperPrint impressao = JasperFillManager.fillReport(getClass()
.getResourceAsStream(rel1), parametros, ds);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.show();
}
public static void main(String[] args) throws Exception {
new GerarRel();
}
}
Nome.java
package vo;
import java.io.Serializable;
import java.util.ArrayList;
public class Nome implements Serializable{
private static final long serialVersionUID = 1L;
private String nome;
private String sobrenome;
private ArrayList<String> ListaCargo;
public Nome(String nome, String sobrenome, ArrayList<Cargo> cargo) {
super();
this.nome = nome;
this.sobrenome = sobrenome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public ArrayList<String> getListaCargo() {
return ListaCargo;
}
public void setListaCargo(ArrayList<String> listaCargo) {
ListaCargo = listaCargo;
}
}
Cargo.java
package vo;
import java.io.Serializable;
public class Cargo implements Serializable{
private static final long serialVersionUID = 1L;
private String cargo;
private String cargo1;
public Cargo(String cargo, String cargo1){
super();
this.cargo = cargo;
this.cargo1 = cargo1;
}
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
public String getCargo1() {
return cargo1;
}
public void setCargo1(String cargo1) {
this.cargo1 = cargo1;
}
}