jasperreport groovy脚本if..else语句

时间:2018-11-14 10:22:42

标签: groovy jasper-reports

我尝试在文本字段中使用表达式,并且语言设置为常规,我输入的内容非常简单,如果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如果条件在现实中相当冗长和复杂,并且很难看是否使用中性运算符?:

1 个答案:

答案 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是一种评估对象的闭合度的方法