2014-09-19 78 views
0

假設我有一些領域類使用默認的驗證:定製驗證消息

class Employee { 

     String name 
     String primaryEmail 
     String url 

     static constraints = { 
      name blank: false 
      primaryEmail email: true, unique: true 
      url blank: false, url: true 

     } 

    } 

我想定義應在驗證失敗的情況下返回的消息,類似的東西的名稱:

class Employee { 

     String name 
     String primaryEmail 
     String url 

     static constraints = { 
      name blank: false 'employee.invalid.name' 
      primaryEmail email: true, unique: true 
      url blank: false, url: true 'employee.invalid.email' 

     } 

    } 

有沒有可能以某種方式?謝謝!

回答

1

定義您自己的自定義消息其實很簡單。但是,您的方法不正確。

首先,看看validation reference瞭解驗證消息代碼是如何構建的。使用

你的榜樣,一些自定義的消息是:

employee.name.blank=Custom message about invalid employee due to blank 
employee.url.blank=Another custom message about blank url 
employee.url.url.invalid=Custom invalid url message 

消息是每個約束類型,因此具有每個屬性一個全局消息行不通的。您需要爲每個可能失敗的約束提供消息。

1

您可以通過定義自定義驗證器來完成此操作。它基本上是一個關閉,最多需要三個參數。因此,在您例如,你可以寫:

class Employee { 

    String name 
    String primaryEmail 
    String url 

    static constraints = { 
     name validator: { 
      if (!it) return ['employee.invalid.name'] 
     } 
     primaryEmail email: true, unique: true 
     url validator: { 
      if (!it) return ['employee.invalid.email'] 
     } 
    } 

}

備註自定義的驗證關閉:如果沒有提供,那麼你可以用隱含它變量屬性的訪問值PARAMS:

validator: { 
    if (!it) ... 
} 

如果您提供了兩個參數,那麼第一個參數是屬性值,第二個是正在驗證的域類實例(例如,您可以檢查其他參數)

validator: {val, obj -> 
    if (val && obj.otherProp){...} 
} 

如果您提供三種PARAMS那麼前兩個是相同的兩個參數版本,三是春節錯誤對象:

validator: {val, obj, err -> 
    if (val && obj.otherProp){...} 
} 

如需更詳細的說明請查看文檔: http://grails.org/doc/latest/ref/Constraints/validator.html