Пользовательские сообщения проверки в Grails - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть ограничение домена, которое я проверяю, как

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'] в ограничении.Но по-прежнему не отображается пользовательское сообщение.

Помогите мне, пожалуйста ....

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Если у вас есть только Users в качестве объектов домена, проще использовать уникальное ограничение:

username unique: true

Тогда, в вашем случае, определяемый код сообщения будетbuildUserNameCommand.userName.unique - и ограничение делает все это за вас.Это также сгенерирует ограничение уникальности схемы БД.

3 голосов
/ 03 апреля 2012

Видите ли вы какие-либо другие пользовательские сообщения для объекта команды, такие как совпадения? Являются ли имена пользователей уникальными глобальными или просто уникальными в рамках организации. Если глобально уникальная проверка легка с уникальная: правда

Если вы просто уникальны в рамках вашей организации, вы можете попытаться вернуть строку «readyExists »из вашего валидатора, а затем определить сообщение в виде:

buildUserNameCommand.userName.alreadyExists = 'Username already exists'

Если это не работает, другой вариант - вернуть false из валидатора. Это может затем подтянуть сообщение

buildUserNameCommand.userName.validator.error= Username already exists

Обратите внимание на строчную букву b в имени класса. Не уверен, что класс должен начинаться со строчной буквы, но в моем коде они есть, и, похоже, это больше соответствует шаблонам Grails.

...