在Jaspersoft Studio 6.3中的TextField表达式中使用lambda表达式

编程入门 行业动态 更新时间:2024-10-12 05:51:52
本文介绍了在Jaspersoft Studio 6.3中的TextField表达式中使用lambda表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I want to use lambda expressions inside a TextField expression like this:

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评估的预期结果是:

The expected result is of the TextField evaluation is:

1 / 2

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

Instead of I'm getting an error in the IDE:

Lambda expressions are allowed only at source level 1.8 or above

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

And this is the exception inside the IDE during the compile:

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.JRAbstractCompilerpileReport(JRAbstractCompiler.java:206) at net.sf.jasperreports.eclipse.builder.JasperReportCompilerpileReport(JasperReportCompiler.java:294) at net.sf.jasperreports.eclipse.builder.JasperReportCompilerpileReport(JasperReportCompiler.java:146) at net.sf.jasperreports.eclipse.builder.JasperReportsBuilderpileJRXML(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,但错误仍在继续。

I already changed my report project to use the JRE System 1.8, but the error continues.

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

How can I solve it? Does jasper compiler supports lambdas?

推荐答案

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

To enable Java 8 support try to add this 3 parameters to the Jaspersoft Studio.ini file (placed at \TIBCO\Jaspersoft Studio-6.x.final folder):

-Dorg.eclipse.jdt.corepiler.codegen.targetPlatform=1.8 -Dorg.eclipse.jdt.corepilerpliance=1.8 -Dorg.eclipse.jdt.corepiler.source=1.8

我的ini文件看起来像这样(对于 Jaspersoft Studio 6.3.1 版本):

My ini file looks like this (for Jaspersoft Studio 6.3.1 version):

-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.preferIPv4Stack=true -Dorg.eclipse.jdt.corepiler.codegen.targetPlatform=1.8 -Dorg.eclipse.jdt.corepilerpliance=1.8 -Dorg.eclipse.jdt.corepiler.source=1.8

我检查了这份报告并且汇编并运作良好:

I checked this report and it compiled and worked well:

<?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="jasperreports.sourceforge/jasperreports" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="jasperreports.sourceforge/jasperreports jasperreports.sourceforge/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 中生成的结果:

我得到了同样的错误( Lambda表达式仅允许在源级别1.8或以上),而不使用 JSS 中的这3个参数:

I got the same error (Lambda expressions are allowed only at source level 1.8 or above) without using this 3 parameters in JSS:

  • 如何在jrxml文件中使用lambda表达式?
  • 什么版本的JaspeReports是否支持Java 8?
  • JDK 8是否支持JasperReports 6 ?
  • How to use lambda expression in jrxml file?
  • What version of JaspeReports has support for Java 8?
  • Does JDK 8 supports JasperReports 6?

更多推荐

在Jaspersoft Studio 6.3中的TextField表达式中使用lambda表达式

本文发布于:2023-11-22 01:33:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1615456.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表达式   Studio   Jaspersoft   lambda   TextField

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!