我在调用 GrailsUI 自动完成标记的自定义标记库中有此代码:
def renderAutoComplete(uicName,isDisabled,theValue) {
params.tableId = 3 // THIS ISN'T AVAILABLE TO AUTO COMPLETE ACTION
out << gui.autoComplete(id:uicName,resultName:"lookUpData",controller:"lookupTable",action:"autoCompleteJSON") {}
}
这是我调用以填充自动完成的操作:
def autoCompleteJSON = {
def lookupTable = LookupTable.get(3) // PARAM NEEDS TO BE SET IN TAGLIB
def list = LookupValue.findAllByLookupTableAndThevalueLike(lookupTable,"${params.query}%")
def jsonList = list.collect { [ id: it.id, name: it.thevalue ] }
def jsonResult = [
lookUpData: jsonList
]
render jsonResult as JSON //render only works in a controller
}
使用硬编码一切正常:
def lookupTable = LookupTable.get(3)
但我需要的是:
def lookupTable = LookupTable.get(params.tableId)
并且 params.tableId 不可用于自动完成。
那么如何在 taglib 中设置参数呢?
更新
事实证明 gui.autocomplete 提供了另外两个我不知道的参数。filterBy 和 filter 可用于精确地将过滤器参数传递给您的控制器。所以现在我这样做:
out << gui.autoComplete(id:uicName,resultName:"lookUpData",controller:"lookupTable",action:"autoCompleteJSON",filterBy:"lookupTable",filter:"${theTagtype.lookupTable.id}", queryDelay:"0.5", value:"${theValue}") {}
它工作得很好。所以我眼前的问题就解决了。但一般问题仍然存在:如何在 taglib 中设置参数?