validation - 尝试以下操作时,为什么自定义消息无法正常使用?

标签 validation grails

我是grails的初学者,但我遇到以下问题。请帮忙。

包跑马场

类用户{

String userName
String password

static constraints = {
    userName(nullable:false, maxSize:20)
    password(password:true, minSize: 8,
            validator: {

                return (it.matches("(.*[\\d])"))?true: ['noNumber']
                return (it.matches("(.*[\\W])"))?true: ['noSpecialCh']
                return (it.matches("(.*[a-z])"))?true: ['noLower']
                return (it.matches("(.*[A-Z])"))?true: ['noUpper']
            }
    )
}

}

我创建了上述域,并在message.properties中添加了以下内容:
users.password.validator.noNumber =应至少包含一个数字
users.password.validator.noLower =也应至少包含一个小写字母
users.password.validator.noUpper =也应该包含数字
users.password.validator.noSpecialCh =也应包含数字

但是,尝试使用错误的值时,我没有得到必填消息。假设,如果我在密码中没有给出任何数字,则应该收到“应至少包含一个数字”消息,但我只能得到与自定义验证消息不匹配的消息。

最佳答案

核心问题在于,与Java不同,Groovy允许多个return语句。如果将其转换为Java,它将无法编译。

Groovy允许使用多个return语句,但显然仅考虑第一个,因此对于您的代码,您只有一个检查,而不是四个检查

(it.matches("(.*[\\d])")) ? true : ['noNumber']

应该是这样的:
if (!it.matches("(.*[\\d])")) {
   return ['noNumber']
}

if (!it.matches("(.*[\\W])")) {
   return ['noSpecialCh']
}

if (!it.matches("(.*[a-z])")) {
   return ['noLower']
}

if (!it.matches("(.*[A-Z])")) {
   return ['noUpper']
}

除了所有正则表达式均已损坏之外,但这是一个单独的问题。

关于validation - 尝试以下操作时,为什么自定义消息无法正常使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163766/

相关文章:

spring - 没有这样的属性 : org. codehaus.grails.INCLUDED_JS_LIBRARIES

java - 更新 JscrollBar 而不重置位置

php - Laravel:更新时唯一的验证

mfc - 使用不受信任的格式字符串安全地调用 strftime

javascript - 表单验证无法正常工作

maven - 我如何在编译组gradle文件中具有属性

validation - Play框架验证: how to override validation messages for validators with parameters?

java - 运行 Grails 项目时出错

hibernate - 如何在Grails 3中将属性传递给Enver?

grails - 仅在grails目标存在时运行