Ресурс JRException не найден при наличии подотчета в отчете Jasper

Я сделал отчет из яшмы, который включает вложенный отчет, используя JasperSoft Studio. Когда я просматриваю его в студии, он работает нормально. Но когда я добавляю его в свой проект java fx, мне нужно отправить подотчет в качестве параметра в основной отчет, верно?

Когда я это делаю, я продолжаю получать сообщение об ошибке о том, что ресурс подотчета не найден. Я не думаю, что есть какие-либо орфографические ошибки, потому что я пробовал это почти со всеми отчетами, которые включают вложенные отчеты ... все еще продолжаю получать эту ошибку ..

Это то, что я пробовал: 1. снова скомпилировал отчет с помощью студии jaspersoft и снова включил их в проект. 2. включил файл jrxml в проект и скомпилировал его с помощью диспетчера компиляции. 3. Я прочитал несколько руководств и вопросы о том, чтобы поместить выражение в элемент подотчета в основном отчете как

$ P {SUBREPORT_DIR} + "subreport_2.jasper"

но я все еще получаю ту же ошибку, и я не знаю, что делаю не так. Ниже мой код

метод в приложении, используемый для просмотра отчета

@FXML
    public void btnMarkingSchemeClicked(ActionEvent actionEvent) {
        try {

//            JasperReport compiledReport = (JasperReport) JRLoader.loadObject(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/MarkingScheme.jasper"));
            JasperReport compiledReport = JasperCompileManager.compileReport(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/MarkingScheme.jrxml"));
            HashMap<String, Object> parameters = new HashMap<>();
            parameters.put("assignID", aid);
            parameters.put("course", cmbCourse.getSelectionModel().getSelectedItem().toString());
            parameters.put("subject", cmbSub.getSelectionModel().getSelectedItem().toString());
            parameters.put("semester", cmbSem.getSelectionModel().getSelectedItem().toString());
            parameters.put("assign", ctrlAssign.search(aid).getAssignName());
//            JasperReport subReport = (JasperReport) JRLoader.loadObject(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/Answers.jasper"));
            JasperReport subReport = JasperCompileManager.compileReport(ViewAssignmentsController.class.getResourceAsStream("/edu/ijse/gdse41/ams/reports/Answers.jrxml"));
            parameters.put("subReport", subReport);
            JasperPrint fillReport = JasperFillManager.fillReport(compiledReport, parameters, ConnectionFactory.getInstance().getConnection());
            JasperViewer.viewReport(fillReport, false);

        } catch (JRException | SQLException | ClassNotFoundException ex) {
            Logger.getLogger(ViewAssignmentsController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

мой основной источник отчета - MarkingScheme.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1  -->
<!-- 2017-06-02T12:52:20 -->
<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="MarkingScheme" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c71b946b-2ba2-4208-97f8-f32e8bcf3fb4">
    <property name="com.jaspersoft.studio.data.sql.tables" value=""/>
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="amsAdapter"/>
    <parameter name="course" class="java.lang.String"/>
    <parameter name="subject" class="java.lang.String"/>
    <parameter name="semester" class="java.lang.String"/>
    <parameter name="assign" class="java.lang.String"/>
    <parameter name="assignID" class="java.lang.String">
        <defaultValueExpression><![CDATA[$P{assignID}]]></defaultValueExpression>
    </parameter>
    <parameter name="subReport" class="net.sf.jasperreports.engine.JasperReport">
        <parameterDescription><![CDATA[]]></parameterDescription>
        <defaultValueExpression><![CDATA[$P{subReport}]]></defaultValueExpression>
    </parameter>
    <queryString language="SQL">
        <![CDATA[SELECT ams.question.qid,
    ams.question.question,
    ams.assign_ques.aid
FROM ams.assign_ques
    INNER JOIN ams.question ON 
     ams.assign_ques.qid = ams.question.qid and ams.assign_ques.aid=$P{assignID}]]>
    </queryString>
    <field name="qid" class="java.lang.String"/>
    <field name="question" class="java.lang.String"/>
    <field name="aid" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement mode="Opaque" x="0" y="0" width="555" height="79" forecolor="#FFFFFF" backcolor="#113891" uuid="52ed193a-ed11-46ba-a09f-1864b843df96"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font size="29" isBold="true"/>
                </textElement>
                <text><![CDATA[   Marking Scheme]]></text>
            </staticText>
        </band>
    </title>
    <pageHeader>
        <band height="80" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="80" height="40" uuid="55b35bb0-5ea8-4417-88be-0083cfee5037"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font size="14"/>
                </textElement>
                <text><![CDATA[Course]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="40" width="80" height="40" uuid="1dc04c2d-9cde-4905-9650-03cc96d406e3"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font size="14"/>
                </textElement>
                <text><![CDATA[Semester]]></text>
            </staticText>
            <staticText>
                <reportElement x="260" y="0" width="100" height="40" uuid="4de2dbe2-bb88-4dbf-88d7-16b36bba8fb4"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font size="14"/>
                </textElement>
                <text><![CDATA[Subject]]></text>
            </staticText>
            <staticText>
                <reportElement x="260" y="40" width="100" height="40" uuid="bb91c5d3-4cde-45eb-8083-012fe6183396"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font size="14"/>
                </textElement>
                <text><![CDATA[Assignment]]></text>
            </staticText>
            <textField>
                <reportElement x="90" y="0" width="160" height="40" forecolor="#123278" uuid="8016c655-1bea-480a-9179-3da4e1e930ad"/>
                <textElement verticalAlignment="Middle">
                    <font size="13"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{course}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="370" y="0" width="170" height="40" forecolor="#123278" uuid="23e58b4b-0bf1-41ae-89f0-48808a0abdd9"/>
                <textElement verticalAlignment="Middle">
                    <font size="13"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{subject}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="90" y="40" width="160" height="40" forecolor="#123278" uuid="650c412a-0c42-4dea-a96f-35d03c11c926"/>
                <textElement verticalAlignment="Middle">
                    <font size="13"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{semester}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="370" y="40" width="170" height="40" forecolor="#123278" uuid="c8cbea5b-afb3-4c85-a96a-156d1c82fb50"/>
                <textElement verticalAlignment="Middle">
                    <font size="13"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{assign}]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
    <columnHeader>
        <band height="30" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30" uuid="f7b84a13-8e80-4c9c-8888-3b081f9d0f55"/>
                <textElement>
                    <font size="16" isBold="true"/>
                </textElement>
                <text><![CDATA[Questions]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="41" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="80" height="20" uuid="9f05a7d2-ac5f-4412-b26b-ab37033cc0fe"/>
                <textElement verticalAlignment="Middle">
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{qid}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="440" height="20" uuid="a299bfe0-a0d1-4aae-8f75-5b58d24b1760"/>
                <textElement verticalAlignment="Middle">
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{question}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement x="100" y="20" width="440" height="20" uuid="72f8c7c2-82ca-48d3-bb89-d5bb4846e1bc"/>
                <subreportParameter name="qid">
                    <subreportParameterExpression><![CDATA[$F{qid}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA["Answers.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

источник моего подотчета - Answers.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1  -->
<!-- 2017-06-02T12:53:52 -->
<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="Answers" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="142adbc1-da50-458b-b076-ba8aa716124f">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="amsAdapter"/>
    <property name="com.jaspersoft.studio.data.sql.tables" value="YW1zLmFuc3dlciAsMTUsMTUsOGE1MjQ1NzQtOGY1ZS00ZWY4LWFiMDAtOWVjYmVmNmU0MTFjOw=="/>
    <parameter name="qid" class="java.lang.String">
        <defaultValueExpression><![CDATA[$P{qid}]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT ams.answer.answer_id,
    ams.answer.answer,
    ams.answer.correctness,
    ams.answer.qid
FROM ams.answer where ams.answer.qid=$P{qid} and ams.answer.correctness=1]]>
    </queryString>
    <field name="answer_id" class="java.lang.String"/>
    <field name="answer" class="java.lang.String"/>
    <field name="correctness" class="java.lang.Boolean"/>
    <field name="qid" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="80" height="20" uuid="517ba9e8-6637-4808-8517-1485d4125971"/>
                <textElement>
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{answer_id}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="90" y="0" width="460" height="20" uuid="4384510c-5dea-47a0-b24b-d4b3bd4088fc"/>
                <textElement>
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{answer}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

ошибка, которую я получаю

Это потому, что даже если вы создали параметр под названием «subReport», он нигде не использовался.


person Dilini Peiris    schedule 02.06.2017    source источник


Ответы (3)


Видеть? В основном отчете по-прежнему присутствует "Answers.jasper". Поэтому он отлично работает в Jasper Studio. Давай изменим это на,

           <subreport>
            <reportElement x="100" y="20" width="440" height="20" uuid="72f8c7c2-82ca-48d3-bb89-d5bb4846e1bc"/>
            <subreportParameter name="qid">
                <subreportParameterExpression><![CDATA[$F{qid}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["Answers.jasper"]]></subreportExpression>
        </subreport>

Я почти уверен, что я не тот, кто научил вас использовать Джаспер :) Будем надеяться, что это сработает

           <subreport>
            <reportElement x="100" y="20" width="440" height="20" uuid="72f8c7c2-82ca-48d3-bb89-d5bb4846e1bc"/>
            <subreportParameter name="qid">
                <subreportParameterExpression><![CDATA[$F{qid}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA[$P{subReport}]]></subreportExpression>
        </subreport>

В MarkingScheme.jrxml измените с

person Ranjith Suranga    schedule 02.06.2017
comment
Спасибо!!! просто ссылка для всех, кто использует файл .jasper, а не: InputStream inSR = getClass (). getResourceAsStream (/reports/MyReports/productividadResumen.jasper); ... JasperReport subReport = (JasperReport) JRLoader.loadObject (inSR); параметры.put (subReport1, subReport); Надеюсь, это здорово !!! - person russellhoff; 29.10.2018
comment
Указанный вами путь статичен. Он должен динамически читать из контекстного пути - person pazfernando; 17.07.2019

Измените класс, добавив Answers.jasper, включая его путь.

<subreportExpression><![CDATA["Answers.jasper"]]></subreportExpression>

to

<subreportExpression><![CDATA[$P{subReport}]]></subreportExpression>

Путь должен быть завершен, начиная с корневого контекста (/).

parameters.put("subReport", "/edu/ijse/gdse41/ams/reports/Answers.jasper");

Тег subreportExpression должен ожидать $ P {SUBREPORT_DIR} + Answer.jasper, как показано ниже:

person Rodrigo Luiz Zini Matias    schedule 19.02.2018
comment
Действительно полезный ответ - person ani0904071; 14.06.2021

И вам необходимо динамически предоставить путь из вашего контекста для $ P {SUBREPORT_DIR}

<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "Answer.jasper"]]></subreportExpression>

Я использую Groovy на Grails! Обычно в отчете отсутствует значение параметра для SUBREPORT_DIR в jrxml. Мои отчеты и вложенные отчеты находятся в папке веб-приложение / отчеты. Итак, при создании отчета с помощью subReport я добавил значение пути, подобное следующему:

где функция getReportDirectory () выглядит следующим образом:

params.put('SUBREPORT_DIR', getReportDirectory() + File.separator)

У меня возникла эта проблема, но разница в том, что я не программирую форму, я создаю ее с помощью Jaspersoft Studio. Что я могу сделать?

def getReportDirectory() {
        String REPORT_DIRECTORY = null;
        if (!REPORT_DIRECTORY) {
            File reportFolder = ApplicationHolder.application.parentContext.getResource('/reports').file;
            REPORT_DIRECTORY = reportFolder.absolutePath;
        }

       return REPORT_DIRECTORY;
}
person ani0904071    schedule 13.06.2021
comment
net.sf.jasperreports.engine.JRException: ресурс не найден в: Answers.jasper. в net.sf.jasperreports.repo.RepositoryUtil.getResourceFromLocation (RepositoryUtil.java:153) в net.sf.jasperreports.repo.RepositoryUtil.getReport (RepositoryUtil.java:112) по адресу net.sf.jasperreports.JRFillSub. .loadReport (JRFillSubreport.java:398) по адресу net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport (JRFillSubreport.java:365) по адресу net.sf.jasperreports.engine.fill.JRFillSubreport.java.evalu ( ) по адресу net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate (JRFillSubreport.java:341) по адресу net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate (JRFillElementContainer.java.:381). engine.fill.JRFillBand.evaluate (JRFillBand.java:500) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand (JRVerticalFiller.java:2022) по адресу net.sf.jasperreports.engine.fill.Fill.J JRVerticalFiller.java:748) по адресу net.sf.jasperreports.engine.fill. JRVerticalFiller.fillReportStart (JRVerticalFiller.java:255) на net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport (JRVerticalFiller.java:115) в net.sf.jasperreports.engine.fill.JRBase (JRVerticalFiller.java:115) в net.sf.jasperreports.engine.fill.JRBase (JRBase 582) по адресу net.sf.jasperreports.engine.fill.BaseReportFiller.fill (BaseReportFiller.java:396) по адресу net.sf.jasperreports.engine.fill.JRFiller.fill (JRFiller.java:90) по адресу net.sf.jasperreports .engine.JasperFillManager.fill (JasperFillManager.java:456) по адресу net.sf.jasperreports.engine.JasperFillManager.fillReport (JasperFillManager.java:863) по адресу edu.ijse.gdse41.ams.view.controllerManager. .java: 174) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke lang.reflect.Method.invoke (Method.java:498) в sun.reflect.misc.Trampoline.invoke (MethodUtil.java:71) в sun.reflect.GeneratedMethodAccessor1.invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethod.java:43 ) в java.lang.reflect.Method.invoke (Method.java:498) в sun.reflect.misc.MethodUtil.invoke (MethodUtil.java:275) в javafx.fxml.FXMLLoader $ MethodHandler.invoke (FXMLLoader.java: 1769) на javafx.fxml. FXMLLoader $ ControllerMethodEventHandler.handle (FXMLLoader.java:1657) по адресу com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:86) по адресу com.sun.javafx.event.agerbandlerBubblingEvent (CompositeEventHandler.java:86) в com.sun.javafx.event.EventHandlingMedlerModel () в com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) в com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:unventDispatcher.BubblingEvent. (BasicEventDispatcher.java:58) в com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) в com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (Basic.java.Dispatcher) в com.javafx. javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) в com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) в com.sun.javafx.ev ent.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) в com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) в com.sun.javafx.event.EventUtil.fireEvent (EventUtil.fireEvent) (EventUtil.fireEvent) в javafx.event.Event.fireEvent (Event.java:198) в javafx.scene.Node.fireEvent (Node.java:8413) в javafx.scene.control.Button.fire (Button.java:185) в com. sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased (ButtonBehavior.java:182) на com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle (BehaviorSkinBase.java:96.java) на com.free. .scene.control.skin.BehaviorSkinBase $ 1.handle (BehaviorSkinBase.java:89) по адресу com.sun.javafx.event.CompositeEventHandler $ NormalEventHandlerRecord.handleBubblingEvent (CompositeEventHandler.java:218.java.java.java.java.java: dispatchBubblingEvent (CompositeEventHandler.java:80) в com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:238) в com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) в com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:unventDispatcher.BubblingEvent. (BasicEventDispatcher.java:58) в com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) в com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (Basic.java.Dispatcher) в com.javafx. javafx.event. EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) по адресу com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) в com.sun.javafx.event.EventDImventChain.displatchCha11) .sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) в com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:54) в javafx.event.Event.fireEvent (Event.java:198 ) в javafx.scene.Scene $ MouseHandler.process (Scene.java:3757) в javafx.scene.Scene $ MouseHandler.access $ 1500 (Scene.java:3485) в javafx.scene.Scene.impl_processMouseEvent (Scene.java:1762 ) в javafx.scene.Scene $ ScenePeerListener.mouseEvent (Scene.java:2494) в com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:381) в com.sun.java. Quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:295) в java.security.AccessController.doPrivilege d (собственный метод) в com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda $ handleMouseEvent $ 354 (GlassViewEventHandler.java:417) в com.sun.javafx.tk.quantum.QuantumToolkit.runWithout.javaLando: в com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent (GlassViewEventHandler.java:416) в com.sun.glass.ui.View.handleMouseEvent (View.java:555) в com.sun.glass.ui.View .notifyMouse (View.java:937) в com.sun.glass.ui.win.WinApplication._runLoop (собственный метод) в com.sun.glass.ui.win.WinApplication.lambda $ null $ 148 (WinApplication.java:191 ) в java.lang.Thread.run (Thread.java:745) - person TanvirChowdhury; 14.06.2021