У меня есть этот код в пользовательском TagLib, который вызывает GrailsUI автозаполнения тег:Как установить Param In A TagLib
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?
UPDATE
Оказывается, что gui.autocomplete обеспечивает еще два Params, что я не был в курсе. filterBy и фильтр могут использоваться для того, чтобы точно передать параметр фильтра вашему контроллеру. Так что теперь я делаю:
out << gui.autoComplete(id:uicName,resultName:"lookUpData",controller:"lookupTable",action:"autoCompleteJSON",filterBy:"lookupTable",filter:"${theTagtype.lookupTable.id}", queryDelay:"0.5", value:"${theValue}") {}
и он отлично работает. Поэтому моя ближайшая проблема решена. Но остается общий вопрос: как установить параметр в taglib?
Что я делаю, это динамическое преобразование формы. Таким образом, renderAutoComplete фактически вызывается из основной функции в моем taglib. Также есть renderTextBox, renderSelect и т. Д. Я не знаю, что нужно отображать до запуска. На самом деле renderAutoComplete может вызываться несколько раз, и нужно отображать разные данные в AC. Мне нужно было установить значение параметра в моем taglib так, чтобы оно было доступно для autoCompleteJSON, чтобы оно могло генерировать данные для AC. Оказалось, что AC taglib предоставил то, что мне нужно. Но я подозреваю, что могут быть другие варианты использования, поэтому я не удалял?. –