gpt4 book ai didi

validation - Grails 命令对象自定义验证消息代码

转载 作者:行者123 更新时间:2023-12-04 18:09:48 25 4
gpt4 key购买 nike

使用命令对象时,例如:

class UserCommand {

String name

static constraints = {
name blank: false, unique: true, minSize: 3
}
}

您可以使用它们来验证对象而不会使它们持久化。在我的情况下,我会验证一个持久类用户。

在 Controller 中:
def save(UserCommand cmd) {
if(!cmd.validate()) {
render view: "create", model: [user: cmd]
return
}
def user = new User()
user.name = cmd.name
user.save()

redirect uri: '/'

}

在messages.properties中:
user.username.minSize.error=Please enter at least three characters.
userCommand.username.minSize.error=Please enter at least three characters.

使用自定义验证消息时,您必须为每个错误编写两次消息代码。一个用于 User 类,另一个用于 UserCommand 类。

有没有办法让每个错误只有一个消息代码?

最佳答案

我在这里可能是错的,但如果您只使用库存 Grails 约束,共享验证消息的唯一方法就是简单地依赖 default.x.x.message message.properties 中的键/值。否则通过以下键形式查找消息:

className.propertyName.errorcode...=

但是,您可以使用 custom validator并覆盖为验证错误返回的消息键。
class User {
...

static constraints = {
...
name blank: false, unique: true, validator: { value, user ->
if(!value || value.length() < 3)
return 'what.ever.key.in.messages.properties'
}
}
}

然后,您可以通过 global constraint 在类之间共享约束来保持所有 DRY。或如@dmahapatro 所述,使用 importFrom在你的 UserCommand 中,
class UserCommand {
...
static constraints = {
importFrom User
...
}
}

如果您有更复杂的验证,您可以创建自己的约束类。以下是一些资源:

http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/
http://blog.swwomm.com/2011/02/custom-grails-constraints.html

关于validation - Grails 命令对象自定义验证消息代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032093/

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