2015-01-26 6 views
0

Я использую Grails 2.4.2 с RestfulController, и этот конкретный контроллер использует PagingRestfulController.Grails 2.4.2 URL-адрес, вызывающий неправильное действие в контроллере

Я пытаюсь запустить поиск действийПродукты в Контроллере продуктов, когда я делаю GET на «/ product/search», но вместо этого он запускает queryForResource.

Grails создал listAllResources и queryForResource с отображением URL-адреса «/ product» (resources: 'product'). Ниже приведено мое сопоставление URL-адресов и соответствующие части Контроллера продуктов. Как я могу вызвать действие поиска?

Mapping URL

"/product"(resources:'product') 
"/product/search"(controller: 'product'){ 
    action = [GET: 'searchProducts'] 
} 

Контроллер продукта

protected List<Product> searchProducts(Map params) { 
    log.debug("searching products..."); 
} 

protected List<Product> listAllResources(Map params) { 
    log.debug("listing all resources..."); 
} 

protected List<Product> queryForResource(Serializable id) { 
    log.debug("querying for resources..."); 
} 

ответ

0

Вам нужно будет определить общественное search действие в контроллере, который может выглядеть примерно так:

def search() { 
    searchProducts(params) 
} 

Защищенные методы listAllResources и queryForResource переопределяют вспомогательные методы, определенные в RestfulController, но сами по себе не выполняют действия открытого контроллера.

Затем используйте это вложенное отображение:

"/product"(resources:'product') { 
    "/search"(controller: 'product', action: 'search', method: 'GET') 
} 
+0

Он все еще работает queryForResource –

+0

См отредактированного ответа –

+0

Андрей, спасибо за вашу помощь, хотя он все еще работает queryForResource –