2010-07-11 5 views
2

droite, fondamentalement, nous avons un lien dans notre système qui est tout en minuscules, mais qui doit être chameau tubed. plutôt que d'obtenir les autres développeurs de résoudre ce problème, je veux juste faire disparaître le problème par url magiqueurl mappings grails

"/myobj/$action?/$id?"{ 
    controller: "myObj"   
} 

ce que je suis en train de faire est la carte tout ce qui fait référence à myobj contrôleur au contrôleur myObj place et garder le l'action et tout le reste pareil. Le code ci-dessus donne une exception, estimant que le

2010-07-11 18:14:50,021 ERROR [default] - Servlet.service() for servlet default threw exception 
java.lang.IllegalArgumentException: URL mapping must either provide a controller or view name to map to! 

mais les travaux suivants

"/myobj/$action?/$id?"(controller: "myObj") 

Je ne comprends pas, compte tenu de la documentation. Pourquoi la fermeture n'a-t-elle pas fonctionné? Ceci est Grails 1.2.0 ...

Répondre

7

Vous devez utiliser

'/myobj/$action?/$id?' { 
    controller = 'myObj' 
} 

Modifier Comme un peu d'explication: le côlon dans l'exemple de travail crée une carte comme décrit here (le cas de travail est une invocation de fonction Groovy avec des paramètres nommés). Dans la clôture, vous devez définir directement la valeur de la propriété du contrôleur, c'est-à-dire en utilisant le signe égal.

Cette différence est démontrée non spécifiquement mise en évidence in the Grails URL mapping documentation.

Édition Voici une méthode non testée qui peut produire des mappages de contrôleur insensibles à la casse ... peut-être.

'$myController/$action?/$id?' { 
    grailsApplication.getArtefacts('Controller').find { it.name.toLowerCase() == myController.name.toLowerCase }.with { controller = it.name } 
} 

Je suppose ici (que je ne l'ai pas vérifié) que l'application Grails est disponible dans le MappingCapturingClosure en the DefaultMappingUrlEvaluator.

+0

ahh - ok, ce qui ne va pas avec la solution de travail que j'ai donnée plus tôt, en utilisant() au lieu de {}. aussi, peu importe ce que j'essaie, avant que les liens n'apparaissent comme myObj, et maintenant ils sont tous myobj. Quel est le problème avec ça? – hvgotcodes

+0

Rien ne va pas avec les parenthèses. Cela fonctionne différemment (ai-je oublié quelque chose?). En outre, le changement dans la façon dont les liens sont affichés est probablement dû au fait que le mappage des URLs prend effet (par défaut Grails link to myController est '/ myController' alors que votre mapping dit à '/ mycontroller'). Si vous essayez de rendre vos liens insensibles à la casse, vous devrez peut-être faire quelque chose d'un peu plus fantaisiste. – ig0774

+0

est-il un moyen de rendre tous les liens de cas in-sensitve? Ce serait grand. J'apprécie votre temps sur celui-ci ... – hvgotcodes