2010-07-13 34 views
3

ok, donc j'ai demandé, et a obtenu une réponse sur la façon de faire une seule instance de contrôleur insensible à la casse vis-à-vis des URL. Je peux faireune autre question urlmapping grails

"/mycontroller/$action?/$id?"(controller: "myController") 

donc quand une application tente en dehors de référence lien dans notre application, leurs urls minuscules (:(soupir) fonctionnera.

Je dois étendre à inclure des actions aussi bien. Donc, la question est, suivant l'approche ci-dessus, ai-je besoin de mettre un mappage d'URL dans chaque action?

/mycontroller/methodone/(controller: "myController", action: methodOne) 
/mycontroller/methodtwo/(controller: "myController", action: methodTwo) 

Quelque chose comme ci-dessus?

Répondre

0

Vous pouvez utiliser une fermeture pour calculer l'action (ou d'autres paramètres) programme:

"/mycontroller/$a?/$id?" { 
    controller = 'myController' 
    action = { params.a?.toLowerCase() } 
} 
+0

wouldnt cette conversion l'action étant appelé en minuscules? Sur le contrôleur, l'action est camelée. Ainsi, un /MyController/MonAction besoins à convertir en /myController/MonAction pour travailler – hvgotcodes

+0

Vous avez raison, je lis votre mauvaise question - je pensais que vous vouliez aller de Lower- à chameau Cas. Pour aller dans l'autre sens, vous auriez besoin d'obtenir la liste des actions pour le contrôleur (voir http://stackoverflow.com/questions/2956294/reading-out-all-actions-in-a-grails-controller), puis construire une carte de minuscules noms de chameaux. Plutôt que de mettre tout ce code dans votre configuration url-mappings, vous voudrez probablement mapper "/ mycontroller/$ a?/$ Id?" à une nouvelle action dans MyController, et que cette action exécute le code inférieur à camel et transmet la requête à l'action camel-cased. –