Отображение Gerneric url для полезных ресурсов в Grails - PullRequest
2 голосов
/ 25 мая 2011

Я настроил некоторые полезные ресурсы в Grails, как это

"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")

Но я хочу использовать более общий тип, например

"/$controller/$id?"(resource: controller)

, который не работает ... (получение404)

Как настроить общее отображение URL-адресов для остальных ресурсов в grails?

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Может показаться, что «ресурсная» часть сопоставления оценивается при запуске, а не при выполнении самого запроса (предположение, исходя из этого).Поэтому я думаю, что вам нужно «предварительно загрузить» набор UrlMappings, который вы хотите, динамически, основываясь на классах домена, доступных при запуске приложения.Нечто подобное может сработать:

class UrlMappings {
static mappings = {
        ApplicationHolder.application.getArtefacts('Domain').each { GrailsClass cl ->
           "/${cl.propertyName}/$id?"(resource: cl.propertyName )            
        } ...
0 голосов
/ 25 мая 2011

Правильное сопоставление для ваших потребностей полностью зависит от того, чего вы пытаетесь достичь (что не может быть определено из вопроса).

Рассмотрим общее сопоставление:

"/$controller/$action?/$id?"{}

Это сопоставит первую часть URL-адреса с контроллером с тем же именем, вторую часть - с действием этого контроллера, а третью часть с тем, что должно быть уникальным идентификатором для экземпляра класса домена.

Примерыкоторые работают с этим отображением:

/book/show/2

Controller: bookController
Action: show
id: 2

This will call the show action of the book controller.
params.id will be 2.

The intention implied in the URL is to show relevant details for a book object 
with an id of 2.

/question/update/6

Controller: questionController
Action: update
id: 6

This will call the update action of the question controller.
params.id will be 6.

The intention implied in the URL is to update the details for a question
object with an id of 6.
...