J'ai ce code dans un taglib personnalisé qui appelle la balise GrailsUI Autocomplete:Comment faire pour configurer un Param Dans un 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") {}
}
Voici mon action qui se qu'on appelle à peupler la saisie semi-automatique:
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
}
Tout fonctionne très bien à l'aide du CODA dur:
def lookupTable = LookupTable.get(3)
mais de ce que je besoin est:
def lookupTable = LookupTable.get(params.tableId)
et params.tableId n'est pas disponible pour l'auto-complétion.
Alors, comment puis-je définir un paramètre dans un taglib?
MISE À JOUR
Il se trouve que gui.autocomplete fournit deux params que je ne connaissais pas. filterBy et le filtre peuvent être utilisés pour le besoin précis de passer un paramètre de filtre à votre contrôleur. Alors maintenant, je fais:
out << gui.autoComplete(id:uicName,resultName:"lookUpData",controller:"lookupTable",action:"autoCompleteJSON",filterBy:"lookupTable",filter:"${theTagtype.lookupTable.id}", queryDelay:"0.5", value:"${theValue}") {}
et il fonctionne parfaitement. Donc, mon problème immédiat est résolu. Mais la question générale demeure: Comment puis-je définir un param dans un taglib?
Ce que je fais est de rendre un formulaire dynamiquement. Donc, renderAutoComplete est appelé depuis la fonction principale de mon taglib. Il y a aussi renderTextBox, renderSelect, etc. Je ne sais pas ce qui doit être rendu avant l'exécution. En fait, renderAutoComplete peut être appelé plusieurs fois et doit afficher des données différentes dans l'AC. J'avais besoin de définir la valeur de param dans mon taglib afin qu'elle soit disponible pour autoCompleteJSON, afin qu'elle puisse générer les données pour l'AC. Il s'est avéré que le taglib AC fourni ce dont j'avais besoin. Mais je soupçonne qu'il peut y avoir d'autres cas d'utilisation, donc je n'ai pas supprimé le? –