Versão atual:

Jasper Reports - JBoss - subrelatório não funciona na web

Fala Pessoal blz?

Estou com um probleminha ao gerar um relatório com subrelatórios. Já rodei pela web atrás de soluções e até agora nenhuma funcionou. Fiz um exemplo simples para tentar resolver o problema e não consegui. Simplesmente o subrelatório não aparece.

No meu relatório principal não tem nada, apenas o número de páginas e o subrelatório:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="teste" pageWidth="842" pageHeight="595" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="fd901293-3c02-414f-9aeb-a219a7b2612a">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["F:\\projeto_fiscalizacao\\Fiscalizacao_Core\\WebContent\\resources\\relatorios\\listaPresenca\\"]]></defaultValueExpression>
    </parameter>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="111" splitType="Stretch">
            <subreport>
                <reportElement x="0" y="0" width="802" height="100" uuid="b5e8bdac-4e6f-4b05-8ba2-eabff2c87277"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "teste_subreport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
    <pageFooter>
        <band height="19">
            <textField>
                <reportElement mode="Transparent" x="557" y="0" width="205" height="17" forecolor="#000000" backcolor="#FFFFFF" uuid="1fa8fb99-c1d0-4bd9-9b47-eabe7b6af092"/>
                <textElement textAlignment="Right" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA["Página "+$V{PAGE_NUMBER}+" de"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement mode="Transparent" x="762" y="0" width="40" height="17" forecolor="#000000" backcolor="#FFFFFF" uuid="d201c2cd-a96f-45f9-81e9-2131746aa220"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
</jasperReport>

Deixei o endereço estático neste exemplo, pois mesmo assim não funciona quando executo na web.

no subrelatório eu apenas adicionei um título:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="teste_subreport" pageWidth="802" pageHeight="555" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="635653c2-51f5-48ca-acb6-6061dfdac6c7">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="189" y="11" width="416" height="56" uuid="38f69006-0a20-4937-ba0c-ec7c9e9e620b"/>
                <textElement textAlignment="Center">
                    <font size="20" isBold="true"/>
                </textElement>
                <text><![CDATA[Título]]></text>
            </staticText>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

Está definido nas propriedades para exibir os campos mesmo quando o datasource está vazio.

Quando eu executo no IReport Designer ele funciona normalmente, mas quando rodo pelo projeto que eu estou fazendo o subrelatório não aparece.

Estou usando Jboss 7.1, JSF+Primefaces, Java 1.6 e o Jasper 5.6. Os jars adicionados ao projeto são os seguintes:




arial.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-digester-2.1.jar
commons-javaflow-20060411.jar
commons-logging-1.1.1.jar
groovy-all-2.0.1.jar
iText-2.1.7.js2.jar
jasperreports-5.6.0.jar
jasperreports-fonts-5.6.0.jar
primefaces-5.1.jar
verdana.jar

Quando eu chamo o relatório da seguinte forma:

HttpServletResponse response = (HttpServletResponse)context.getResponse();

        try {

            ServletOutputStream servletOutputStream = response.getOutputStream();
            response.setContentType("application/pdf");
            FacesContext.getCurrentInstance().responseComplete();
            String diretorio = obterDiretorio(tipo);
            InputStream reportDiploma = context.getResourceAsStream(diretorio);
            JasperPrint report = null;
                report = JasperFillManager.fillReport(reportDiploma, params);

            JasperExportManager.exportReportToPdfStream(report, servletOutputStream);

            servletOutputStream.flush();
            servletOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Não acontece nenhum erro. Simplesmente não aparece o subrelatório, só o relatório principal. Se eu chamar diretamente o subrelatório ele aparece.

Pensei que fosse o diretório fixo ou algo do tipo, mas já coloquei no subrelatório na propriedade subreport expression o valor:

getClass().getResource( $P{SUBREPORT_DIR} + "teste_subreport.jasper")

e mesmo assim não funcionou.

Já tentei passar parâmetros pelo java como este:

       JasperReport subreport;
    try {
        subreport = (JasperReport)JRLoader.loadObjectFromFile(context.getRealPath(REPORT_PATH+"listaPresenca/teste_subreport.jasper"));
         parametros.put("subreport", subreport);
    } catch (JRException e) {

        e.printStackTrace();
    }

e mesmo assim o subrelatório não aparece.

Desconfio que seja algum Jar, mas até baixar novamente eu ja tentei e não funcionou. Se alguém puder me dar uma luz, eu agradeço.

Versão(1):

Ver a versão formatada

Jasper Reports - JBoss - subrelatório não funciona na web

Comentário

new question