2013-04-19 25 views
0

比方說,我有以下型號:在Grails中,我如何應用來自第三方數據源的inList約束?

class Product { 
    String name 
    String price 
    String currency 

    static constraints = { 
     currency inList: ['USD', 'EUR'] 
} 

現在我們有inList約束爲currency必須從服務被拉到了新的要求:

class CurrencyService { 
    def getAvailableCurrencies = { 
     ... 
    } 
} 

如何使這項工作?我想:

class Product { 
    def currencyService 
    ... 

    static constraints = { 
     currency inList: currencyService.getAvailableCurrencies() 
    } 
} 

但我不能在static constraints背景下訪問currencyService實例。我也嘗試使用static currencyService,但這同樣不起作用。有任何想法嗎?

+0

這可能會提供一些指針http://stackoverflow.com/questions/2459897/using-grails-service-in-域級 – dmahapatro

回答

1

正如dmahapatro上面提到的,你可以使用一個custom validator它使用您的服務:

static constraints = { 
    currency validator: { value, obj -> 
     if (!(value in obj.currencyService.getAvailableCurrencies())) 
      return ['invalid.currency'] 
    } 
} 
相關問題