2012-04-02 14 views
1

私は私のようなカスタム検証メッセージが

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というメッセージが既に存在しています。

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

buildusernamecommandは私のクラス名である:私は私のようmessage.propertiesを変更しました。私はまた、制約内でreturn['invalid.userName']を試しました。しかし、まだカスタムメッセージを表示していません。

私を助けてください....

+0

Grailsのどのバージョンを使用していますか? –

答えて

2

あなたは試合のようなコマンドオブジェクトのための他のカスタムメッセージのいずれかを見ていますか? ユーザー名は、組織の範囲内で一意にグローバルか、一意であるかどうかを確認します。組織の範囲内だけでユニークなあなたがあなたのバリデータから文字列「alreadyExists」を返す試みることができる、そして形式でメッセージを定義した場合、真

buildUserNameCommand.userName.alreadyExists = 'Username already exists' 
をグローバルにユニークな検証が ユニークで簡単であれば

それが動作しない場合、別のオプションはバリデータからfalseを返すことです。これは、メッセージに

buildUserNameCommand.userName.validator.error= Username already exists 

注クラス名に小文字Bを引くかもしれません。クラスが小文字で始める必要があるかどうかはわかりませんが、私のコードではそうです。Grailsのパターンに忠実であるようです。

username unique: true 

次に、あなたのケースでは、定義するためのメッセージコードはbuildUserNameCommand.userName.uniqueだろう - と制約がためにすべてを行います:

+0

返事をありがとう...本当に助けになった..... –

3

あなただけのドメインオブジェクトとしてUsersを持っている場合は、それがunique制約を使用する方が簡単です君は。また、DBスキーマの一意性制約も生成されます。

関連する問題