2012-04-02 48 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已經存在。我修改了我的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']。但它仍然不顯示自定義消息。

幫我出請....

+0

您正在使用哪個版本的Grails? – 2012-04-03 00:52:12

回答

2

你看到任何像比賽一個命令對象的其他自定義消息? 用戶名是唯一全球性的,或者在組織範圍內是唯一的。如果全球唯一的驗證是容易 獨特:真正

如果你可以嘗試從您的驗證返回字符串「alreadyExists」組織的範圍內,只是唯一的,那麼在形式定義消息:

buildUserNameCommand.userName.alreadyExists = 'Username already exists' 

如果這不起作用,另一個選擇是從驗證器返回false。那麼這可能會在郵件中拉

buildUserNameCommand.userName.validator.error= Username already exists 

注意小寫b的類名。不知道該課程是否需要以小寫字母開頭,但在我的代碼中,它似乎更符合Grails模式。

+0

感謝您的回覆......真的有幫助..... – 2012-04-03 14:18:39

3

如果你只有Users作爲領域對象,它更容易使用unique約束:

username unique: true 

然後,在你的情況下,消息代碼來定義將buildUserNameCommand.userName.unique - 和約束它所有的您。它也會生成數據庫模式唯一性約束。