如何在Grails中创建带有自定义错误消息的自定义验证器?

如何在Grails中创建带有自定义错误消息的自定义验证器?,grails,validation,custom-errors,Grails,Validation,Custom Errors,如何在grails中创建自定义验证程序,并使其将自定义字符串传递回视图和错误消息 我看到太多人陷入了同样的困境,我决定创建一个问题和一个答案来解决它。步骤1:创建一个域对象或命令对象,并对其设置自定义约束,例如。。。 这将检查您输入的idNumber是否以77开头。如果没有,它将发送一个错误。下一个问题,我们如何显示错误 步骤2:自定义视图以显示错误 在验证器中 这将传递对视图的引用,指向messages.properties中的自定义消息 步骤4:攻击系统,允许将消息直接传递给视图 这只适用于

如何在grails中创建自定义验证程序,并使其将自定义字符串传递回视图和错误消息

我看到太多人陷入了同样的困境,我决定创建一个问题和一个答案来解决它。

步骤1:创建一个域对象或命令对象,并对其设置自定义约束,例如。。。 这将检查您输入的idNumber是否以77开头。如果没有,它将发送一个错误。下一个问题,我们如何显示错误

步骤2:自定义视图以显示错误 在验证器中

这将传递对视图的引用,指向messages.properties中的自定义消息

步骤4:攻击系统,允许将消息直接传递给视图 这只适用于那些专门开发多语言网站的人

Grails允许您将自定义参数传递给解析器。您可以在消息文件中引用这些自定义参数。为了欺骗系统,我们可以创建一个自定义消息,其中整个消息是一个自定义参数。因此:

在messages.properties中

在验证器中


进行自定义验证的替代方法是创建自定义约束并将其与Grails关联


哇,这太令人印象深刻了,但对我的需求来说太多了:)这太棒了!现在我的字段显示自定义错误消息。但是,它也显示了
messages.properties
文件中的默认错误消息。例如,我在我的验证器中定制了空消息,当我运行代码时,我得到了定制消息&
default.null.message
。如何使默认消息不显示?!谢谢@AlwaysANovice答案如下:
@grails.validation.Validateable
class PeopleCommand {

    String  firstName 
    String  lastName
    String  emailAddress
    String  idNumber

    static constraints = {
        firstName (blank: false)
        lastName  (blank: false)
        emailAddress  (blank: false)
        idNumber  (blank: false, size: 13..16, validator: {value, object ->
                if (!value.startsWith('77')) return false;
        })
    }
}
<div class="${hasErrors(bean:person,field:'idNumber','error')}">
    <label class="control-label">Identity Number</label>
    <input value="${fieldValue(bean:person,field:'idNumber')}" name="idNumber" type="text"/>
    <div class="error-messages">
        <g:renderErrors bean="${command}" as="list" field="idNumber"/>   
    </div>
</div>
validation.idStartsWith77=Your ID number must start with 77
idNumber  (blank: false, size: 13..16, validator: {value, object ->
    return 'validation.idStartsWith77'
})
validation.customRuntimeMessage={3}
idNumber  (blank: false, size: 13..16, validator: {value, object ->
    return ['validation.customRuntimeMessage', 'You need to start your ID with 77']
})