как избавиться от двойных ошибок заводной - PullRequest
1 голос
/ 24 ноября 2011

У меня есть проверка для большого размера файла в блоке try, после того, как эта ошибка снова возникла, и проверила нулевые значения других атрибутов статических ограничений, а также сбросила эту ошибку.

Как остановить поток после возврата первой ошибки?

вот код

static constraints = {
        applicationName(blank: false, size: 1..25)
        applicationShortName(blank: false, size: 1..10)
        applicationImage(nullable: false, maxSize: MAX_SIZE)
        contentProviderId (
            validator: {
                if (it == 0) {
                    return ['notSelected']
                }
            }
        )
        customErrorMessage (
                validator: {
                    if ("fileToBig".equals(it)) {
                        return ['fileToBig']
                    }
                }
        )
    }

try {
            CommonsMultipartFile file = request.getFile('applicationImageUrl');

            logger.debug("POSTPROCESS: is file empty=${file.isEmpty()}")
            if(!file.isEmpty()) {

                try {


                        -- other logic


                }
                catch (Exception ex) {
                    logger.warn("Failed to upload file - improper file type", ex)
                    return [];
                }

                logger.debug("Getting new image file")
                try {
                    -- logic

                    if (file.size <= MAX_SIZE) {
                        -- logic
                    } else {
                        customErrorMessage = "fileToBig"; ( ERROR FOR BIG FILE SIZE)


                    }
                } catch (Exception e) {
                    logger.warn("Failed to upload file", e)
                    customErrorMessage = "fileToBig";

                }
            } else {
                logger.debug("File was empty. Will check if there is a file in submission")
                if (submission.applicationImage != null && submission.applicationImage != []) {
                    logger.debug("submission contains applicationImage=${submission.applicationImage}")
                    this.applicationImage = submission.applicationImage;
                }
            }
        } catch (Exception e) {
            this.errors.reject("error","An error occured when uploading file. Please try again.");
            logger.error("Failed to upload file", e);
            return [];
        }

        --logic
        if (application != null) { //Application already exists!
            submission.applicationId = application.id;
            return [next: 10];
        }

        return [];
    }

после ошибки большого размера файла изображение приложения не задано, поэтому также выдается нулевая ошибка образа приложения ...

Ответы [ 2 ]

0 голосов
/ 25 ноября 2011
applicationImage(maxSize: MAX_SIZE,
            validator: {val, obj ->
            if (obj.customErrorMessage == null) {
                if (val == null) return ['nullable']

            }
        })
0 голосов
/ 24 ноября 2011

Вы можете добавить пользовательский валидатор в поле applicationImage, чтобы проверять только нулевое значение, если поле customErrorMessage не равно нулю.Таким образом, вы получите ошибку applicationImage только в исключительной ситуации валидации, если customErrorMessage не равен нулю.

При закрытии валидатора у вас есть доступ к значению проверяемого поля, а также ко всему объекту:

myField(validator: { val, obj -> return propertyName == "myField" })

Таким образом, вы можете сделать что-то вроде этого:

static constraints = {
        applicationName(blank: false, size: 1..25)
        applicationShortName(blank: false, size: 1..10)
        applicationImage(validator: {val, obj ->
            if (obj.customErrorMessage != null) {
                if (val == null) return ['imageNull']
                if (val.size() > MAX_SIZE) return ['tooLarge']
            }
        })
        contentProviderId (
            validator: {
                if (it == 0) {
                    return ['notSelected']
                }
            }
        )
        customErrorMessage (
                validator: {
                    if ("fileToBig".equals(it)) {
                        return ['fileToBig']
                    }
                }
        )
    }

Может потребоваться настройка сообщений об ошибках, но я надеюсь, что вы поняли мою точку зрения;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...