gpt4 book ai didi

grails - 如何在Grails中使用自定义错误消息创建自定义验证器?

转载 作者:行者123 更新时间:2023-12-04 10:05:11 25 4
gpt4 key购买 nike

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

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

最佳答案

步骤1:创建域对象或命令对象,并在其上放置自定义约束,例如...

@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;
})
}
}

这将检查您输入的idNumber是否以77开头。如果不是,则将发送错误。下一个问题,我们如何显示错误?

步骤2:自定义 View 以显示您的错误
<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>

在上面的示例中,如果人员模型对象的idNumber字段有错误,则 ${hasErrors(bean:person,field:'idNumber','error')}将字符串 error添加到html类。此类可用于设置输入的样式以及显示和/或隐藏 div.error-messages块。 <g:renderErrors bean="${command}" as="list" field="idNumber"/>将显示严重错误消息。

第3步:创建一条性感的自定义消息

IMPORTANT: Grails does not allow you to send a message directly to the view. Instead, you have to declare the message in /i18n/messages.properties (Message Bundles). You can use any key you like.



在messages.properties中
validation.idStartsWith77=Your ID number must start with 77

在验证器中
idNumber  (blank: false, size: 13..16, validator: {value, object ->
return 'validation.idStartsWith77'
})

现在,它传递对 View 的引用,指向您在messages.properties中的自定义消息。

步骤4:修改系统以允许将消息直接传递到 View

这仅适用于 而不是开发多语言网站的人。

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

在messages.properties中
validation.customRuntimeMessage={3}

在验证器中
idNumber  (blank: false, size: 13..16, validator: {value, object ->
return ['validation.customRuntimeMessage', 'You need to start your ID with 77']
})

关于grails - 如何在Grails中使用自定义错误消息创建自定义验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com