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

时间:2014-08-20 13:32:28

标签: 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 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 File类,从服务器中删除此当前文件,然后传输新映像到服务器文件夹。但是我有以下错误:

  

错误500:内部服务器错误

     

URI       / vs3 / campanhas / editar / 8 Class       groovy.lang.MissingPropertyException消息       没有这样的属性:oldImgPath for class:vs3.CampanhasController`   绕119线   的grails-app \控制器\ VS3 \ CampanhasController.groovy

第119行,在这种情况下是def oldImg = new File(oldImgPath)

我已打印oldImgPath,结果是:

  

C:\ Grails_IDE \工作空间\ VS3 \ web应用\图像\横幅\ fc712691a63824948c11a19569682803.jpg

...这个文件存在,我可以正常加载我的浏览器。

UP!

我改变了这一行: def oldImgPath = servletContext.getRealPath("images/banners/${banner.image}")def oldImgPath = servletContext.getRealPath("web-app/images/banners/${banner.image}") ......我有同样的错误。 而且,以防万一,import org.codehaus.groovy.grails.web.context.ServletContextHolder was already included

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

1 个答案:

答案 0 :(得分:1)

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