我尝试在文本字段中使用表达式,并且语言设置为常规,我输入的内容非常简单,如果else语句
if ($P{P_TFE_TYPE} == null || $P{P_TFE_TYPE} == ""){
"abc"
}else{
"def"
}
但这已引发异常
net.sf.jasperreports.engine.JRException:编译报表表达式类文件时遇到错误:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:
calculator_RPT0010_1542190583832_137322:472:意外令牌:如果@第472行第22列。 1个错误 。 在net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:109) 在net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:203) 在net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:286) 在com.jaspersoft.studio.editor.preview.view.control.ReportController.compileJasperDesign(ReportController.java:481) 在com.jaspersoft.studio.editor.preview.view.control.ReportController.access $ 8(ReportController.java:466) 在com.jaspersoft.studio.editor.preview.view.control.ReportController $ 1.run(ReportController.java:369) 在org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) 引起原因:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败: Calculator_RPT0010_1542190583832_137322:472:意外令牌:如果@第472行第22列。 1个错误
org.codehaus.groovy.control.ErrorCollector.failIfErrors上的(ErrorCollector.java:310) 在org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:150) 在org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:120) 在org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:132) 在org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:360) 在org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:145) 在org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:111) 在org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:237) 在org.codehaus.groovy.control.CompilationUnit $ 1.call(CompilationUnit.java:167) 在org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931) 在org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593) 在org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) 在org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) 在net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:102) ...还有6个
出什么问题了?
我在开头{下方看到红色下划线,并且工具提示为
在'{'
处缺少EOF
如果我使用类似表达式
($P{P_TFE_TYPE} == null || $P{P_TFE_TYPE} == "")?"abc":"def"
它可以编译,一切都按预期运行。
我知道我可以使用?:运算符,但是我不希望if..else如果条件在现实中相当冗长和复杂,并且很难看是否使用中性运算符?:
答案 0 :(得分:1)
在表达式中不能使用
换句话说,您可以执行以下操作:
x = y==1 ? 'a' 'b'
但是您不能这样做:
x = if( y==1 ){ 'a' }else{ 'b' }
但是您可以尝试使用闭包。例如这样的
this.with{
if(x==1){
return 'a'
}else{
return 'b'
}
return '0'
}
with
是一种评估对象的闭合度的方法