2012-11-08 57 views
0

我目前正在使用Grails應用程序,並且想要更改在我的域模型中顯示對象的默認錯誤消息。我相信我所做的一切都是正確的,但也許有人可以幫我解決這個問題,下面的代碼:Grails自定義驗證消息不起作用?

域模型:

class Details { 

    long mobileNo 
    String name 
    static constraints = { 
    mobileNo(blank:false, maxsize:12, matches:"44[0-9]{10}") 
    } 
} 

messages.properties

sms.mobileNo.matches.invalid=You must enter a correct mobile number in {0} 

查看

​​

現在,當點擊它進入到下面的控制器功能在網頁上創建:

def details = new Details(params) 

     if (details.validate()) { 

} 
else{ 
      render view: 'create', model: [detailsInstance: details] 

     } 

現在我希望申請到這樣的工作:一個錯誤的數據傳遞給控制器​​它認爲它是無效的,然後將錯誤的模型傳遞迴相同的視圖。然後,錯誤消息被拉到messages.properties文件中的數據不正確的地方。不過,我希望看到這一點:

You must enter a correct mobile number in [mobileNo] 

我,而不是看到這一點:

Failed to convert property value of type java.lang.String to required type long for property mobileNo; nested exception is java.lang.IllegalArgumentException: Could not parse number: Unparseable number: "gg" 

是否有人可以幫助我來生成以顯示有用的信息給用戶進行驗證自定義消息?謝謝

回答

2

問題是,在驗證之前,綁定試圖將您的值'gg'綁定到long。

你的約束也說:

mobileNo(blank:false, maxsize:12, matches:"44[0-9]{10}" 

因此你希望它是一個字符串,但它定義爲長。

嘗試將您的mobileNo更改爲字符串類型。

+0

非常感謝這是一個很好的幫助,現在我已經對它進行了排序:-D – user723858

0

深入瞭解您的堆棧跟蹤,它可能會告訴您錯誤被引發的行號。我的猜測是,它是扔在下一行例外...

new Details(params) 

這是因爲你沒有檢查輸入Grails是試圖「GG」轉換爲長,這將無法正常工作了。在我看來,你這裏有四個選項...

  1. 變化mobileNo爲String
  2. 驗證paramsnew Details(params)之前(不推薦)
  3. 使用JavaScript/jQuery的,只允許數值輸入。
  4. 我記得那裏有一些額外的插件添加到grails進行遠程驗證或類似的東西,但我不記得他們離開我的頭頂。但是,我只會使用jquery(或其他)構建我自己的。

享受!