Jasperreports subdataset для jr: таблица из jasperprint fillreport

Я пытаюсь получить источник данных из java в набор данных на jrxml для отображения в таблице jr:, но он вылетает, когда я пытаюсь получить данные в набор данных, поэтому я предполагаю, что ошибка возникает из-за импорта или параметра с тип данных, который обрабатывает источник данных. Ошибка отображается ниже. Любые идеи? Ты все.

Ошибка:

[JRException: Errors were encountered when compiling report expressions class file:
1. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
                value = ((net.sf.jasperreports.engine.JRBeanCollectionDataSource)parameter_dados.getValue()); //$JR_EXPR_ID=8$
                          <---------------------------------------------------->
2. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
                value = ((net.sf.jasperreports.engine.JRBeanCollectionDataSource)parameter_dados.getValue()); //$JR_EXPR_ID=8$
                          <---------------------------------------------------->
3. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
                value = ((net.sf.jasperreports.engine.JRBeanCollectionDataSource)parameter_dados.getValue()); //$JR_EXPR_ID=8$
                          <----------------------------------------------------> 3 errors .]

Метод Java, обрабатывающий отчет Jasper:

public File getRelatorioPdf(AuditoriaEntity auditoriaEntity) throws JRException, IOException {

        File pdf = null;
        Map<String, Object> parametros = new HashMap<>();
        parametros.put("objetivo", "TESTE OBJETIVO");
        parametros.put("dataInicio", "09/05/2017");
        parametros.put("dataFim", "09/05/2017");
        parametros.put("equipa", "Equipa TESTE");
        parametros.put("coordenador", "Coordenador TESTE");
        parametros.put("processo", "PROCESSO TESTE");
        parametros.put("ambito", "AMBITO TESTE");

        //TESTE DE LISTA
        JRBeanCollectionDataSource dados = null;
        List <testeLista> teste = new ArrayList<testeLista>();
        teste.add(new testeLista("teste1", "1", "2"));
        teste.add(new testeLista("teste2", "3", "4"));
        teste.add(new testeLista("teste3", "5", "6"));
        teste.add(new testeLista("teste4", "7", "8"));
        teste.add(new testeLista("teste5", "9", "10"));
        teste.add(new testeLista("teste6", "11", "12"));
        dados = new JRBeanCollectionDataSource(teste);

        final String jasperReportPath = "jasper-reports/relatorio_auditoria/relatorio_auditoria.jrxml";
        InputStream inputStreamTemplate = this.environment.resourceAsStream(jasperReportPath);

        JasperReport report = JasperCompileManager.compileReport(inputStreamTemplate);
        JasperPrint print = JasperFillManager.fillReport(report, parametros, dados);
        pdf = File.createTempFile("temp", ".pdf");
        pdf.deleteOnExit();
        JasperExportManager.exportReportToPdfStream(print, new FileOutputStream(pdf));

        return pdf;
    }

Java-класс testeLista:

public class testeLista{
    private String naoConformidade;
    private String numNC;
    private String numOBS;

    public testeLista(String naoConformidade, String numNC, String numOBS) {
        this.naoConformidade = naoConformidade;
        this.numNC = numNC;
        this.numOBS = numOBS;
    }

    public String getNaoConformidade() {
        return naoConformidade;
    }

    public void setNaoConformidade(String naoConformidade) {
        this.naoConformidade = naoConformidade;
    }

    public String getNumNC() {
        return numNC;
    }

    public void setNumNC(String numNC) {
        this.numNC = numNC;
    }

    public String getNumOBS() {
        return numOBS;
    }

    public void setNumOBS(String numOBS) {
        this.numOBS = numOBS;
    }
}

Отчет Джаспера:

<?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="Blank_A4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1e9d3196-bef6-4b86-97d2-b6eb6e579cec">
    <import value="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"></import>
    <!--<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>-->
    <subDataset name="Dataset1">
        <queryString>
            <![CDATA[]]>
        </queryString>
        <field name="naoConformidade" class="java.lang.String"/>
        <field name="numNC" class="java.lang.String"/>
        <field name="numOBS" class="java.lang.String"/>
    </subDataset>
    <parameter name="dados" class="net.sf.jasperreports.engine.JRBeanCollectionDataSource"/>
    <parameter name="coordenador" class="java.lang.String"/>
    <parameter name="processo" class="java.lang.String"/>
    <parameter name="ambito" class="java.lang.String"/>
    <parameter name="objetivo" class="java.lang.String"/>
    <parameter name="equipa" class="java.lang.String"/>
    <parameter name="dataFim" class="java.lang.String"/>
    <parameter name="dataInicio" class="java.lang.String"/>
<pageFooter>
        <band height="160" splitType="Stretch">
            <!--<textField>
                <reportElement x="10" y="0" width="100" height="20"/>
                <textFieldExpression><![CDATA[$F{naoConformidade}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="110" y="0" width="30" height="20"/>
                <textFieldExpression><![CDATA[$F{numNC}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="140" y="0" width="30" height="20"/>
                <textFieldExpression><![CDATA[$F{numOBS}]]></textFieldExpression>
            </textField>-->

            <componentElement>
                <reportElement x="0" y="0" width="160" height="20">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                    <property name="com.jaspersoft.studio.table.style.column_header"/>
                    <property name="com.jaspersoft.studio.table.style.detail"/>
                </reportElement>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                    <datasetRun subDataset="Dataset1">
                        <datasetParameter name="REPORT_DATA_SOURCE">
                            <datasetParameterExpression><![CDATA[$P{dados}]]></datasetParameterExpression>
                        </datasetParameter>
                        <!--<dataSourceExpression><![CDATA[$P{dados}]]></dataSourceExpression>-->
                    </datasetRun>
                    <jr:column width="100">
                        <jr:detailCell height="20">
                            <textField>
                                <reportElement x="0" y="0" width="100" height="20"/>
                                <textFieldExpression><![CDATA[$F{naoConformidade}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="30">
                        <jr:columnHeader height="20">
                            <staticText>
                                <reportElement x="0" y="0" width="30" height="20"/>
                                <text><![CDATA[NC]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell height="20">
                            <textField>
                                <reportElement x="0" y="0" width="30" height="20"/>
                                <textFieldExpression><![CDATA[$F{numNC}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="30">
                        <jr:columnHeader height="20">
                            <staticText>
                                <reportElement x="0" y="0" width="30" height="20"/>
                                <text><![CDATA[OBS]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell height="20">
                            <textField>
                                <reportElement x="0" y="0" width="30" height="20"/>
                                <textFieldExpression><![CDATA[$F{numOBS}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </pageFooter>
</jasperReport>
0
0
788
1

Ответы 1

Ошибка сообщает вам, что переменная «dados» не имеет допустимого «типа объекта java» в своем конструкторе в этой строке.

dados = new JRBeanCollectionDataSource(teste);

Ссылка на переменную "teste" должна быть java.util.Collection Объектов JavaBean..

обратите внимание, что класс «JRBeanCollectionDataSource» должен содержать только ссылки (как java.util.Collection) на "зарегистрированные классы компонентов" конфигурации сервера приложения, в котором выполняется код.

При добавлении Java Beans в список их ссылка на идентификатор должна быть такой же, как в файле конфигурации, хотя серверный поток может иметь доступ к своему объекту «Application» для получения коллекции всех сконфигурированных bean-компонентов.

Однако Джаспер идет намного дальше, включая преднамеренный сервер отчетов и движок.

Вы должны указать, является ли это преднамеренным одиночным сервером отчетов Jasper или интеграцией с более ранним типом сервера с механизмом JSP и системой механизма сервлетов.

ТОЖЕ

Объект "testeLista" более разумно написан как TestLista.

// Declare case sensitive class name first letter is capital (java convention of class naming)
public class TesteLista{.....
// normal class name first letter capitalized
List <TesteLista> teste = new ArrayList<TesteLista>();

Другие вопросы по теме