2017-02-02 18 views
0

Как вы карту URL-адрес с двумя идентификаторами:Grails 3 UrlMappings

/заказы/$ id1/OrderLines/$ id2

id2 является необязательным

/заказы/$ id1/OrderLines GET -> все OrderLines для заказа id1 /заказы/$ id1/OrderLines/$ id2 GET -> показать id2 в набор заказов порядка id1

методы должны быть отображены в OrderLineController

Это довольно легко с Spring MVC @RequestMapping и @PathVariable.

Grails 3 не разрешает @RequestMapping (есть уловки, чтобы заставить его работать - но я не хочу идти по этому маршруту - бесполезно сложно).

Оцените справку. Я довольно много искал.

+2

Ищите «Вложенные ресурсы» [здесь] (http://docs.grails.org/latest/guide/single.html#restfulMappings). – dmahapatro

ответ

1

Вы можете использовать UrlMappings:

UrlMappings.groovy

class UrlMappings { 
     static mappings = { 
      "/orders/$id1/orderlines"(controller: 'orderLine', action: 'someAction1') 
      "/orders/$id1/orderlines/$id2"(controller: 'orderLine', action: 'someAction2') 
     } 
    } 

OrderLineController.groovy

def someAction1(Long id1){ 
    //... 
} 
def someAction2(Long id1, Long id2){ 
    //... 
} 
+0

Большое спасибо. Отличное решение! – Nabil

0

Использование вложенных URLMappings:

UrlMappings.groovy

class UrlMappings { 
    static mappings = { 
    "/orders"(resources:"order") { 
     "/orderLines"(resources:"orderLine") 
    } 
    } 
} 

OrderController.groovy

def show() { 
    params.id // Order.id 
} 

OrderLineController.groovy

def show() { 
    params.orderId // Order.id 
    params.id  // OrderLine.id 
} 

Как заявил @dmahapatro, проверьте документацию на Nested Resources.

+0

Большое спасибо за это элегантное решение. Единственное изменение, которое мне было необходимо, - это установить оба метода в OrderLineController. Мне не нужно ничего делать с OrderController, он работает нормально. Поэтому я закодировал метод index() для обработки одного параметра (order.id), а метод show() обрабатывает два параметра. – Nabil