| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Groovy & Grails > аналог <jsp:invoke fragment=""> в gsp |
| Автор: 4eJIoBekMoJIekyJIa 13.5.2011, 20:59 |
| Всем, привет. Хочу создать тег, который в качестве параметра будет принимать кусок кода. В JSP2.0 я могу сделать так: <p:foo> <jsp:attribute name="attr"> blahblahblah <p:bar paramt='${param}'/> </jsp:attribute> </p:foo> и в реализации тега p:foo добавить <jsp:invoke fragment="attr" /> Подскажите, есть чтолибо подобное в Grails GSP? |
| Автор: emmanuil 24.5.2011, 10:25 |
| В gsp есть шаблоны. Например, через <g:render ... />, <g:include ... /> [url=http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.2.3 Views and Templates]См. тут.[/url] |
| Автор: 4eJIoBekMoJIekyJIa 24.5.2011, 17:47 |
| с помощью g:include того что я хочу добиться нельзя. Похоже единственное решение это: <g:set var="attr"> blahblahblah <p:bar paramt='${param}'/> </g:set> <g:render template="foo" model="[attr: attr]"/> _foo.gsp: <p>in foo</p> ${attr} <p>still inn foo</p> Конечно не совсем то но все же |
| Автор: emmanuil 24.5.2011, 17:56 |
| Через include, если нужно передать модель, то просто через контроллер рендер делать. Так ты напиши, что нужно? Зачем тебе set? Запихивать в переменную разметку, по мне это плохое решение. Лучше доп. шаблон сделать. |
| Автор: emmanuil 8.6.2011, 18:56 | ||||||||
Через include:
А в контролере делаешь render(template: 'path_to_template', model: [par1, par2]) То же самое можно сделать через тег <g:render />, просто в контролере можно реализовать логику по подготовке модели, например.
Вот я и спрашиваю зачем передавать разметку через переменную?! Может я чего не до понял... Этот участок кода сделать шаблоном:
и потом в коде
и получишь то же самое. Добавлено через 2 минуты и 22 секунды А, чуть не упустил. Можно передавать название шаблона в другой шаблон и рендерить, если заранее не известен шаблон. |
| Автор: 4eJIoBekMoJIekyJIa 9.6.2011, 11:59 | ||||||
Например, я хочу сделать тег который выводит некую хитрую таблицу, эту таблицу я хочу использовать в разных местах, но немного видоизмененной, например добавлять после последнего столбца еще какието столбцы. Т.е я пишу
И в реализации тега:
И соответственно то что я передал как controlColumnsHeader подставляется в хедер таблицы, аналогично controlColumnsContent подставляется в тело таблицы. |
| Автор: emmanuil 12.6.2011, 15:43 |
| Теперь понятно. Может так - http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.2.5 Sitemesh Content Blocks? Добавлено через 5 минут и 59 секунд Еще можно подумать над реализацией самого тега в grails и там контролировать, что и когда рендерить. |
| Автор: emmanuil 12.6.2011, 16:04 |
| Да. Блоки тут не подойдут наверное. Можно пошаманить над реализацией тега таблицы и там контролировать. Еще можно попробовать реализовать на jsp и использовать в gsp - http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.3.6 Using JSP Tag Libraries. Других вариантов не знаю. Лучше, наверное, сделать свои шаблоны на каждый случай. |
| Автор: 4eJIoBekMoJIekyJIa 17.6.2011, 11:42 |
| ясн, спасибо за ответ. |