Grails与可选参数的url模式不匹配

时间:2014-07-17 01:49:00

标签: grails

在Grails 2.3.7上,假设以下url映射..

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

..和控制器:

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

一切都很好......

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

...但

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

如果number中的/foo/$number?是可选的,为什么/foo/foo/会映射到actionTwo()

1 个答案:

答案 0 :(得分:0)

在以下两行

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

您已在网址中将号码定义为可选,因为您已使用"?" 。改变" $ number?"到" $ number"在

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

第二行,它应该可以正常工作。

以下是有关网址映射https://grails.org/version/URL+mapping/8

的详细信息