Grails-尝试实例化文件类对象时出现MissingPropertyException错误

Grails-尝试实例化文件类对象时出现MissingPropertyException错误,grails,groovy,Grails,Groovy,在一个控制器方法中,我试图上传一个图像来替换一个简单的横幅管理系统中的旧图像。方法如下: def edit() { def banner = Banner.get(params.id) banner.clearErrors() banner.name = params.name def imgFile = request.getFile('imageUpload') if (!imgFile.empty) { def servletCon

在一个控制器方法中,我试图上传一个图像来替换一个简单的横幅管理系统中的旧图像。方法如下:

def edit() {
    def banner = Banner.get(params.id)
    banner.clearErrors()
    banner.name = params.name

    def imgFile = request.getFile('imageUpload')
    if (!imgFile.empty) {
        def servletContext = ServletContextHolder.servletContext
        def oldImgPath = servletContext.getRealPath("images/banners/${banner.image}")
        banner.image = UploadFormService.getSafeFileName(imgFile.getOriginalFilename())
    }

    if (HomeService.saveBanner(banner)) {
        if (!imgFile.empty) {
            def oldImg = new File(oldImgPath)
            boolean oldImgStatus = oldImg.delete()
            imgFile.transferTo(new File("images/banners/${banner.image}"))
        }
        flash.message = "\"${banner.name}\" was successfully saved!"
    } else {
        flash.message = "NOK"
    }
    redirect(action:"index")
} 
如果
saveBanner(Banner Banner)
返回
true
,并且表单文件输入不为空,则该方法应使用当前映像实例化Groovy文件类,从服务器删除此当前文件,然后将新映像传输到服务器文件夹。但我有以下错误:

错误500:内部服务器错误

URI /vs3/campanhas/editar/8级 groovy.lang.MissingPropertyException消息 类vs3.CampanhasController没有这样的属性:oldImgPath` 第119行附近 grails app\controllers\vs3\CampanhasController.groovy

第119行,在本例中是
def oldImg=new File(oldImgPath)

我打印了
oldImgPath
,结果是:

C:\Grails\u IDE\workspace\vs3\web app\images\banners\fc712691a63824948c11a19569682803.jpg

…并且此文件存在,我可以通过浏览器正常加载它

起来

我改变了这一行:
def oldImgPath=servletContext.getRealPath(“images/banner/${banner.image}”)
def oldImgPath=servletContext.getRealPath(“web-app/images/banners/${banner.image}”)
…我也有同样的错误。 而且,为了以防万一,
import org.codehaus.groovy.grails.web.context.ServletContextHolder已经包含在内


在此之前,我还应该检查什么?

您在第一个
if
-块的范围内定义了
def oldImgPath
,因此它在它之外的任何地方都是不可见的

我还保留了
def oldImgPath=servletContext.getRealPath(“images/banners/${banner.image}”)
,现在可以正常工作了。