Поддерживает ли Grails поддерживаемые вложенные URL-адреса, например «/ articles/1/comments/5»? Если нет плагина для этого?Поддерживает ли Grails поддерживающие вложенные URL-адреса?
ответ
Если вы связаны с более старым выпуском Grails (например, < 2.3), а доступные плагины не работают, вы можете использовать named URL mappings для создания эффективного успокоительного отображения.
Вот пример из моего проекта - я не упомянул некоторые подробности, но, надеюсь, это поможет вам начать, если вы решите попробовать этот подход.
В вашем UrlMappings.groovy
/** 1. Mappings can handle multiple actions depending on HTTP
method like Rest. Names are a little clunky, like this would
be more appropriate as "resource" vs "showResource" but we didn't want
potential naming conflict in future release
2. TODO: DRY constraints - make constraints global
3. make sure controllers have proper actions defined
*/
/** RESTFUL mapping for single resource */
name listResources: "/$controller" {
action = [GET: "list", POST: "save"]
}
name createResource: "/$controller/create" {
action = [GET: "create" ]
}
name deleteResource: "/$controller/$id?/delete" {
action = [POST: "delete", DELETE: "delete"]
constraints { id(matches: /[0-9]+/) }
}
name editResource: "/$controller/$id?/edit" {
action = [GET: "edit", PUT: "update", POST: "update"]
constraints { id(matches: /[0-9]+/) }
}
name showResource: "/$controller/$id?" {
action = [GET: "show", PUT: "update", POST: "update", DELETE: "delete"]
constraints { id(matches: /[0-9]+/) }
}
/** RESTFUL mapping for CHILD with PARENT */
name listChildResources: "/$parentResource/$pid/$controller" {
action = [GET: "list", POST: "save"]
constraints { pid(matches: /[0-9]+/) }
}
name createChildResource: "/$parentResource/$pid/$controller/create" {
action = [GET: "create" ]
constraints { pid(matches: /[0-9]+/) }
}
name showChildResource: "/$parentResource/$pid/$controller/$id?" {
action = [GET: "show", PUT: "update", POST: "update", DELETE: "delete"]
constraints {
id(matches: /[0-9]+/)
pid(matches: /[0-9]+/)
}
}
name editChildResource: "/$parentResource/$pid/$controller/$id?/edit" {
action = [GET: "edit"]
constraints {
id(matches: /[0-9]+/)
pid(matches: /[0-9]+/)
}
}
Убедитесь, что вы контроллерах действия и поддерживаются методы HTTP определить, например,
static allowedMethods = [
save: "POST",
update: ["POST", "PUT"],
delete: ["POST", "DELETE"]
]
Затем с помощью сопоставления, как так (например, позволяет сказать, что у нас есть сад и Растения в качестве ресурсов).
//show a garden
<g:link mapping="showResource" controller="garden"
id="${gardenInstance.id}">${gardenInstance.name}</g:link>
//create a plant for garden
<g:link mapping="createChildResource" controller="plant"
params="[parentResource: 'garden', pid: gardenInstance.id]">Add Plant</g:link>
//show list of plants within a garden
<g:link mapping="listChildResources" controller="plant"
params="[parentResource: 'garden', pid: gardenInstance.id]">List plants for Garden</g:link>
Показанный здесь текст довольно подробный, но вы можете поместить все это в TagLib и иметь что-то похожее.
<g:restShow resource="garden"
id="${gardenInstance.id}">${gardenInstance.name}</g:restShow>
<g:restCreate" resource="plant"
parent="${gardenInstance}">Add Plant</g:restCreate>
См. here. Вложенные URL-адреса RESTful будут поддерживаться в Grails 2.3.
Спасибо за информацию, но, как вы сказали, это будет включено в входящий выпуск. Есть ли какой-нибудь плагин для того, что позволило бы сделать то же самое в Grails 2.2? – syllepsa
Я понятия не имею. Я сомневаюсь в этом. Подробнее об этом здесь: http://stackoverflow.com/q/11657392 –
- 1. Поддерживает ли поддерживающие скобки SQL Server Compact?
- 2. Поддерживает ли SystemVerilog вложенные пакеты?
- 3. Поддерживает ли java вложенные методы?
- 4. Поддерживает ли java.util.Properties вложенные свойства?
- 5. Поддерживает ли Hibernate вложенные транзакции?
- 6. Поддерживает ли вложенные документы Crate.io
- 7. Поддерживает ли MariaDB вложенные транзакции?
- 8. Поддерживает ли Intel IPP графические процессоры, поддерживающие OpenGL?
- 9. Поддерживает ли MATLAB вложенные переменные области?
- 10. Поддерживает ли NEST вложенные типы данных?
- 11. Поддерживает ли BigQuery вложенные операторы CASE?
- 12. Поддерживает ли поддерживаемые вложенные запросы поддержку rescore?
- 13. Поддерживает ли UVM вложенные/внутренние классы?
- 14. Поддерживает ли Jinja2 вложенные операторы if?
- 15. Поддерживает ли Spring вложенные выражения SpEL?
- 16. Поддерживает ли ExtJS 4.1 вложенные сетки?
- 17. Вложенные теги Grails
- 18. Grails: вложенные объекты команды
- 19. Почему F # поддерживает вложенные классы?
- 20. Watson Разговор поддерживает вложенные намерения?
- 21. Взаимные ссылки Grails вложенные петли
- 22. Шаблоны, поддерживающие форматирование шаблонов
- 23. Проверьте, поддерживает ли устройство размытие
- 24. Windows 8 поддерживает приложения, поддерживающие базу данных Access Access?
- 25. Поддерживающие события на sock.js
- 26. C поддерживающие динамические массивы
- 27. Поддерживает ли привязка данных вложенные свойства в Windows Forms?
- 28. Поддерживает ли поддержка фреймов? Вложенные маршруты, такие как рельсы?
- 29. Поддерживает ли spring.ftl (привязки freemarker) вложенные пути? Как?
- 30. Поддерживает ли Realm на Xamarin параллельные (не вложенные) транзакции записи?
Это работает! Большое спасибо. – syllepsa