2014-07-17 20 views
5

On Grails 2.3.7, giả sử các bản đồ url sau ..Grails không phù hợp với mẫu url với tham số tùy chọn

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

..và điều khiển:

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

Tất cả tốt ...

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

... nhưng

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

Nếu number là tùy chọn trong /foo/$number?, tại sao /foo/foo/ bản đồ để actionTwo()?

+1

Đây là bản sao trong 2.4.2. Trông giống như một lỗi đối với tôi, bạn có thể nêu vấn đề JIRA tại đây https://jira.grails.org/browse/GRAILS. – dmahapatro

+0

Các thành phần tùy chọn có hoạt động không nếu chúng không nằm ở cuối URI? –

+0

@IanRoberts Trong khi không được khai báo rõ ràng, theo các tài liệu, có, nhưng đó không phải là vấn đề, '/ foo /' không bao giờ nên ánh xạ tới 'action2()'. btw, có phải thứ tự các mẫu URL được liệt kê trong vấn đề 'URLMappings.groovy' về quyền ưu tiên không? Tôi không tin như vậy, chỉ tò mò thôi. – raffian

Trả lời

0

ở bên dưới hai dòng

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

bạn đã xác định số như tùy chọn trong url, như bạn đã sử dụng "?" . Thay đổi "$ number?" thành "$ number" trong

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

dòng thứ hai và nó sẽ hoạt động tốt.

dưới đây là chi tiết về ánh xạ url https://grails.org/version/URL+mapping/8

Các vấn đề liên quan