1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jboss ireport jasperreports relatórios jsf primefaces ou faça a sua própria pergunta.