2014-07-17 9 views
5

Na Grails 2.3.7, załóżmy następujące mapowania URL ..Grails nie dopasowywania wzorców adresów URL z opcjonalnym parametrem

"/foo/$number?"  (controller:'test', action:'actionOne') 
"/foo/$number?/bar" (controller:'test', action:'actionTwo') 

..i Kontroler:

class TestController { 
    def actionOne(){ render "Action_ONE: ${params.number}" } 
    def actionTwo(){ render "Action_TWO: ${params.number}" } 
} 

Wszystko dobre ...

/foo/1  //prints 'Action_ONE: 1' 
/foo/2/bar //prints 'Action_TWO: 2' 
/foo//bar //prints 'Action_TWO: null' 
/foo//  //prints 'Action_ONE: null' 

... ale

/foo //prints 'Action_TWO: null' 
/foo/ //prints 'Action_TWO: null' 

Jeśli number jest opcjonalny w /foo/$number?, dlaczego /foo i /foo/ mapę do actionTwo()?

+1

To replikacji w 2.4.2. Wygląda mi na błąd, możesz zgłosić problem JIRA tutaj https://jira.grails.org/browse/GRAILS. – dmahapatro

+0

Czy opcjonalne składniki powinny działać w ogóle, jeśli nie znajdują się na końcu identyfikatora URI? –

+0

@IanRoberts Chociaż nie jest to wyraźnie określone, zgodnie z dokumentami, tak, ale to nie jest problem, '/ foo /' nigdy nie powinien być odwzorowany na 'action2()'. btw, czy kolejność wzorców adresów URL wymienionych w 'URLMappings.groovy' ma znaczenie pod względem pierwszeństwa? Nie wierzę, po prostu ciekawi. – raffian

Odpowiedz

0

się poniżej dwóch linii

"/foo/$number?"  (controller:'test', action:'actionOne') 
"/foo/$number?/bar" (controller:'test', action:'actionTwo') 

zdefiniowanego jako opcja numer w adresie URL, ponieważ użyłeś „?” . Zmień "numer $?" do "$ number" w

"/foo/$number?/bar" (controller:'test', action:'actionTwo') 

druga linia i powinno działać poprawnie.

oto szczegóły dotyczące mapowania url https://grails.org/version/URL+mapping/8

Powiązane problemy