【问题标题】:Use lambda expressions inside TextField expression in Jaspersoft Studio 6.3在 Jaspersoft Studio 6.3 中的 TextField 表达式中使用 lambda 表达式
【发布时间】:2017-01-12 16:32:39
【问题描述】:

我想在 TextField 表达式中使用 lambda 表达式,如下所示:

Arrays.asList($F{field1}, $F{field2}, $F{field3}).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / "))

假设这些字段的值:

$F{field1} = 1
$F{field2} = null
$F{field3} = 2

TextField 评估的预期结果是:

1 / 2

而不是我在 IDE 中收到错误:

Lambda expressions are allowed only at source level 1.8 or above

这是编译期间IDE内部的异常:

net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Lambda expressions are allowed only at source level 1.8 or above
                value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getValue()), ((java.lang.String)field_c_celular.getValue()), ((java.lang.String)field_c_fax.getValue()), ((java.lang.String)field_c_email.getValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$
                                                                                                                                                                                                                                                               <------------>
2. Lambda expressions are allowed only at source level 1.8 or above
                value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getOldValue()), ((java.lang.String)field_c_celular.getOldValue()), ((java.lang.String)field_c_fax.getOldValue()), ((java.lang.String)field_c_email.getOldValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$
                                                                                                                                                                                                                                                                           <------------>
3. Lambda expressions are allowed only at source level 1.8 or above
                value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getValue()), ((java.lang.String)field_c_celular.getValue()), ((java.lang.String)field_c_fax.getValue()), ((java.lang.String)field_c_email.getValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$
                                                                                                                                                                                                                                                               <------------>
3 errors
.

    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:206)

    at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:294)

    at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:146)

    at net.sf.jasperreports.eclipse.builder.JasperReportsBuilder.compileJRXML(JasperReportsBuilder.java:220)

    at com.jaspersoft.studio.editor.action.CompileAction.actionCompile(CompileAction.java:142)

    at com.jaspersoft.studio.editor.action.CompileAction$1.run(CompileAction.java:93)

    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

我已经将我的报表项目更改为使用 JRE System 1.8,但错误仍然存​​在。

我该如何解决? jasper 编译器是否支持 lambdas?

【问题讨论】:

    标签: java lambda java-8 jasper-reports jaspersoft-studio


    【解决方案1】:

    要启用 Java 8 支持,请尝试将这 3 个参数添加到 Jaspersoft Studio.ini 文件(放置在 \TIBCO\Jaspersoft Studio-6.x.final 文件夹中) :

    -Dorg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
    -Dorg.eclipse.jdt.core.compiler.compliance=1.8
    -Dorg.eclipse.jdt.core.compiler.source=1.8
    

    我的 ini 文件如下所示(对于 Jaspersoft Studio 6.3.1 版本):

    -startup
    plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417
    -data
    @noDefault
    --launcher.defaultAction
    openFile
    -vm
    features/jre.win32.win32.x86_64.feature_1.8.0.u92/jre/bin
    -vmargs
    -Xms128m
    -Xmx1024m
    -XX:+CMSClassUnloadingEnabled
    -XX:+UseConcMarkSweepGC
    -Dfile.encoding=UTF-8
    -Djava.net.preferIPv4Stack=true
    -Dorg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
    -Dorg.eclipse.jdt.core.compiler.compliance=1.8
    -Dorg.eclipse.jdt.core.compiler.source=1.8
    

    我检查了这份报告,它编译并运行良好:

    <?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="java8support" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
        <parameter name="p1" class="java.lang.String" isForPrompting="false">
                <defaultValueExpression><![CDATA["1"]]></defaultValueExpression>
        </parameter>
        <parameter name="p2" class="java.lang.String" isForPrompting="false">
                <defaultValueExpression><![CDATA["2"]]></defaultValueExpression>
        </parameter>
        <title>
            <band height="79" splitType="Stretch">
                <textField>
                    <reportElement x="80" y="20" width="234" height="30"/>
                    <textFieldExpression><![CDATA[Arrays.asList($P{p1}, $P{p2}).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / "))]]></textFieldExpression>
                </textField>
            </band>
        </title>
    </jasperReport>
    

    编译结果:

    JSS中生成的结果:

    备注

    我在 JSS 中没有使用这 3 个参数时遇到了同样的错误 (Lambda expressions are allowed only at source level 1.8 or above):


    更多关于如何从 Java 项目中编译模板的信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多