因此,我有以下代码(重要部分):

import java.lang.String;
//More imports ...

String errorString = ""
//More global variables

def mainMethod(){
    if (errorString.length()) {
        errorString += "BTW, fields with errors must be either corrected or set back to their original value before proceeding."
        invalidInputException = new InvalidInputException(errorString);
    }
}


然后,当我运行脚本时,Jira在catalina.out中向我抛出以下错误消息:

groovy.lang.MissingPropertyException: No such property: errorString for class: com.onresolve.jira.groovy.canned.workflow.validators.editAssigneeValidation


因此,我不确定为什么脚本无法将errorString识别为变量。

最佳答案

因为您正在使用此代码作为脚本。编译后,所有未包含在方法中的代码将放入run()方法中,因此,您的errorString将在run()方法中声明,而您的mainMethod()将尝试使用errorString既不存在于自己的范围内,也不存在于类的范围内。

一些解决方案:

1. @Field

添加@FielderrorString转换为已编译脚本类中的字段

@groovy.transform.Field String errorString = ""

def mainMethod(){
    if (errorString.length()) {
        errorString += "BTW, fields with errors must be either corrected or set back to their original value before proceeding."
        invalidInputException = [error: errorString]
    }
}

mainMethod()


2.绑定

删除类型声明,因此errorString将包含在脚本的绑定中:

errorString = ""

def mainMethod(){
    if (errorString.length()) {
        errorString += "BTW, fields with errors must be either corrected or set back to their original value before proceeding."
        invalidInputException = [error: errorString]
    }
}

mainMethod()




这是脚本的groovyConsole输出:

groovy - Groovy中的String没有此类属性错误-LMLPHP

08-16 12:35