grails - grails验证嵌套的命令对象不起作用

标签 grails grails-2.0 grails-validation command-objects

我正在使用grails 2.2.1并尝试验证嵌套的命令结构。这是我的命令对象的简化版本:

@Validateable
class SurveyCommand {

    SectionCommand useful
    SectionCommand recommend

    SurveyCommand() {
        useful = new SectionCommand(
                question: 'Did you find this useful?',
                isRequired: true)
        recommend = new SectionCommand(
                question: 'Would you recommend to someone else?',
                isRequired: false)
    }
}

@Validateable
class SectionCommand {
    String question
    String answer
    boolean isRequired

    static constraints = {
        answer(validator: answerNotBlank, nullable: true)
    }

    static answerNotBlank = { String val, SectionCommand obj ->
        if(obj.isRequired) {
            return val != null && !val.isEmpty()
        }
    }
}

当我尝试验证SurveyCommand的实例时,无论节的值是什么,而且始终不会调用我在true(SectionCommand)中的自定义验证器,它始终会返回answerNotBlank。从grails文档中看来,this kind of nested structure is supported(deepValidate默认为true)。但是,也许此规则仅适用于域对象,而不适用于Command对象?还是我只是在这里想念东西?

最佳答案

您可以在主命令对象中添加自定义验证器

@Validateable
class SurveyCommand {

    SectionCommand useful
    SectionCommand recommend

    static subValidator = {val, obj ->
        return val.validate() ?: 'not.valid'
    }

    static constraints = {
        useful(validator: subValidator)
        recommend(validator: subValidator)
    }

    SurveyCommand() {
        useful = new SectionCommand(
            question: 'Did you find this useful?',
            isRequired: true)
        recommend = new SectionCommand(
            question: 'Would you recommend to someone else?',
            isRequired: false)
    }
}

关于grails - grails验证嵌套的命令对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181599/

相关文章:

grails - 如何在 grails 中使用 XML 用户文件实现身份验证?

caching - Grails在客户端存储和获取数据

html - 为ES转换grails gsp中的引号

grails - 如何在Grails中使用@Validateable确保非域Command类的唯一性

grails - 为什么 Grails hasMany 列表大小错误?

validation - Grail 的错误属性从何而来?

grails - Grails 2.3.8检查URL映射是否出现字符串

grails - 如何在grails中使用fckeditor?

grails - 自定义错误消息的Grails问题

grails - Grails 域 Controller 中的依赖注入(inject)