Spi*_*der 19 validation grails custom-errors
如何在grails中创建自定义验证器并使其将自定义字符串传递回视图并显示错误消息?
我看到很多人被困在同一个地方,我决定创建一个问题和答案来处理它.
Spi*_*der 36
@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;
})
}
}
Run Code Online (Sandbox Code Playgroud)
这将检查您输入的idNumber是否以77开头.如果不是,则会发送错误.下一个问题,我们如何显示错误?
<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>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,如果person模型对象的idNumber字段有错误,${hasErrors(bean:person,field:'idNumber','error')}则会将字符串添加error到html类.此类可用于设置输入样式并显示和/或隐藏div.error-messages块.在<g:renderErrors bean="${command}" as="list" field="idNumber"/>将显示一个可怕的错误消息.
重要信息:Grails不允许您直接向视图发送消息.相反,您必须在/i18n/messages.properties(消息包)中声明消息.您可以使用任何您喜欢的密钥.
在messages.properties中
validation.idStartsWith77=Your ID number must start with 77
Run Code Online (Sandbox Code Playgroud)
在验证器中
idNumber (blank: false, size: 13..16, validator: {value, object ->
return 'validation.idStartsWith77'
})
Run Code Online (Sandbox Code Playgroud)
现在,它传递了对视图的引用,指向messages.properties中的自定义消息...
这仅适用于特别没有开发多语言网站的人.
Grails允许您将自定义参数传递给解析器.您可以在消息文件中引用这些自定义参数.为了欺骗系统,我们可以创建自定义消息,其中整个消息是一个自定义参数.因此:
在messages.properties中
validation.customRuntimeMessage={3}
Run Code Online (Sandbox Code Playgroud)
在验证器中
idNumber (blank: false, size: 13..16, validator: {value, object ->
return ['validation.customRuntimeMessage', 'You need to start your ID with 77']
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19458 次 |
| 最近记录: |