我正在做一個應用程序來過濾一些日誌消息。日誌消息屬於屬於某個位置的主機。控制器允許按文本,主機和其他一些參數進行過濾,並且我需要爲條件添加一些動態生成的閉包。用一些代碼,這將被澄清;我有這樣的Config.groovy中(這閉合不是固定的,這應該是改變時外部文件動態重新加載的,和可編輯由管理員):Grails將固定標準與動態動態列表結合起來
pruebaclos = {
host {
location {
ilike("slug", "%grs%")
}
}
}
然後,在控制器中,我有這樣的:
// Hosts
List<Host> hosts = []
params.list("host_id")?.each { String hostIdStr ->
if (hostIdStr.isLong()) {
Long hostId = hostIdStr.toLong()
Host host = Host.get(hostId)
if (host) {
hosts << host
}
else {
// Not found
}
}
else {
// Id not valid
}
}
// generated externally....
def additionalFilters = []
additionalFilters << grailsApplication.config.pruebaclos
def results = HostLogMessage.createCriteria().list (max: params.long("max"), offset: params.long("offset")) {
and {
if (hosts) {
or {
hosts.each { Host currentHost ->
eq("host", currentHost)
}
}
}
if (params.user) {
ilike("user", "%${ params.user }%")
}
if (params.facility) {
ilike("facility", "%${ params.facility }%")
}
if (params.severity) {
ilike("severity", "%${ params.severity }%")
}
if (params.message) {
ilike("message", "%${ params.message }%")
}
}
or {
additionalFilters.each {
it.delegate = delegate
it()
}
}
}
但我得到這個錯誤:
could not resolve property: slug of: XXXXXX.HostLogMessage
如果我把同封在控制器本身,我沒有得到任何錯誤,應用封閉:
def myClos = {
host {
location {
ilike("slug", "%cabu%")
}
}
}
def additionalFilters = []
additionalFilters << myClos
任何想法,如果我把錯誤,如果我把配置文件中的封閉?
這些都與主要的域類(垃圾刪除):我想我知道抓什麼.. 如果定義在Config.groovy
封閉
class Location {
def configurationService
static hasMany = [
hosts: Host
]
Location parent
String slug
String name
}
class Host {
static hasMany = [ messages: HostLogMessage ]
Location location
String name
}
class HostLogMessage {
static belongsTo = [ host: Host ]
DateTime dateTime
String user
String facility
String severity
String message
}
做'additionalFilters'和的元素'delegate'有什麼課? – injecteer 2014-09-03 11:30:42
additionalFilters是應該添加到條件中的閉包列表。我不知道到底是什麼「委託」,我已經看到在很多使用重複使用閉包標準的例子中...... – okelet 2014-09-03 12:27:08
do'additionalFilters.each {it.delegate = delegate println'$ it - > $ delegate 「 它() }' – injecteer 2014-09-03 12:33:38