【问题标题】:custom validation messages in grailsgrails 中的自定义验证消息
【发布时间】:2012-04-02 23:45:34
【问题描述】:

我有一个域约束,我正在验证就像

userName(blank:false, nullable:false, Size: 5..50,matches:'^[A-Za-z\\d]*$',validator:{chkUser,user->if(user.loginService.getUser(user.organizationId,user.userName)!=null){
                                                                                                                    return[propertyName="userName"]}
                                                                                              })

所以我要做的是调用登录服务并查看用户名是否存在。如果用户名存在,我必须返回消息 USerName 已经存在。我已将我的 message.properties 修改为:

BuildUserNameCommand.userName.matches= Username Should have alphanumeric characters only
BuildUserNameCommand.userName.invalid.userName=Username already exists
BuildUserNameCommand.userName.validator.error= Username already exists

buildusernamecommand 是我的班级名称。我也在约束中尝试了return['invalid.userName']。但它仍然没有显示自定义消息。

请帮帮我....

【问题讨论】:

  • 您使用的是哪个版本的 Grails?

标签: grails grails-orm grails-domain-class grails-2.0


【解决方案1】:

您是否看到命令对象的任何其他自定义消息,例如匹配项? 用户名是全球唯一的还是在组织范围内唯一的。如果全局唯一验证很容易 唯一:真

如果只是在组织范围内是唯一的,您可以尝试从验证器返回字符串“alreadyExists”,然后在表单中定义消息:

buildUserNameCommand.userName.alreadyExists = 'Username already exists'

如果这不起作用,另一种选择是从验证器返回 false。然后可能会拉入消息

buildUserNameCommand.userName.validator.error= Username already exists

注意类名上的小写b。不确定该类是否需要以小写字母开头,但在我的代码中是这样,而且它似乎更符合 Grails 模式。

【讨论】:

    【解决方案2】:

    如果您只有Users 作为域对象,使用unique 约束会更容易:

    username unique: true
    

    然后,在您的情况下,要定义的消息代码将是 buildUserNameCommand.userName.unique - 并且约束会为您完成所有工作。它还会生成数据库模式唯一性约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2013-06-06
      • 2011-12-24
      相关资源
      最近更新 更多