代码之家  ›  专栏  ›  技术社区  ›  user1169587

jasperreport groovy脚本if..else语句[重复]

  •  0
  • user1169587  · 技术社区  · 7 年前

    我尝试在文本字段中使用表达式,语言设置为groovy,我输入的是一个非常简单的if-else语句

    if ($P{P_TFE_TYPE} == null || $P{P_TFE_TYPE} == ""){
       "abc"
    }else{
       "def"
    }
    

    但这已经抛出异常作为

    计算器_RPT0010_1542190583832_137322:472:意外标记:if@第472行,第22列。 1错误 . 在net.sf.jasperreports.compilers.jrgovycompiler.compileUnits(jrgovycompiler.java:109) 位于net.sf.jasperreports.engine.design.jractcompiler.compileReport(jractcompiler.java:203) 在com.jaspersoft.studio.editor.preview.view.control.ReportController.compilejsperdesign(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) 计算器_RPT0010_1542190583832_137322:472:意外标记:if@第472行,第22列。

    位于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.antlrsparserplugin.transformcstinoast(antlrsparserplugin.java:145) 位于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.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.。否则,如果条件在现实中非常冗长和复杂,并且很难看到是否使用十进制运算符?:

    1 回复  |  直到 7 年前
        1
  •  1
  •   daggett    7 年前

    在表达式中不能使用if。

    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

    推荐文章