Предположим, у меня есть фрагмент gsp, который хранится в моей базе данных. Как программно объединить его с моделью данных для создания строки.Программный рендеринг GSP
ответ
ApplicationContext любого приложения Grails содержит компонент под названием
groovyPagesTemplateEngine
По умолчанию это экземпляр GroovyPagesTemplateEngine. Таким образом, вы можете использовать код, как это в вашем контроллере или услуге:
class MyService/MyController {
def groovyPagesTemplateEngine
String renderGSPToString(String uri, Map model) {
groovyPagesTemplateEngine.createTemplate(uri).make(model).toString()
}
}
NB: этот фрагмент не действительно взят из работы кода, он должен просто пояснить идею.
Я нашел DIRTY (но рабочий) способ рендеринга сложных gsps в автономном режиме с использованием groovyPageRenderer с замененным скриптингом. В этом случае у вас есть доступ ко всем GSP синтаксис включая g:if
и т.д ..
Сначала определим две фиктивные классы:
class StringPageLocator extends GrailsConventionGroovyPageLocator {
GroovyPageScriptSource findViewByPath(String content) {
return new StringScriptSource(content)
}
}
class StringScriptSource implements GroovyPageScriptSource{
String content
public StringScriptSource(String content) {
this.content=content
}
@Override String suggestedClassName() { "DummyName" }
@Override boolean isPublic() { true }
@Override String getScriptAsString() { return content }
@Override boolean isModified() { true }
@Override String getURI() { "DummyURI" }
}
И тогда вы можете использовать его в качестве такового:
def groovyPageLocator // Injected automaticaly to service/controller etc...
groovyPageRenderer.groovyPageLocator=new StringPageLocator()
String output=groovyPageRenderer.render(
view:'Hello2 ${user} <g:if test="${test}">TRUE!!!</g:if>',
model:[user:'test user2',test:true]
)
Вы можете сделать метод контроллера, который делает то, что вы хотите. Тогда у вас будет HTTP api, чтобы выполнить то, что вы хотите. Шаблон метода контроллера будет иметь тег <g:render>
, соответствующим образом параметризованный.
- 1. рендеринг содержимого в шаблоне gsp
- 2. Отключить программный рендеринг jpct-ae
- 3. Рендеринг gsp/view с макетом не работает
- 4. Рендеринг страницы gsp после успеха ajax
- 5. Grails: рендеринг файла из папки с данными в gsp
- 6. Internet explorer не показывает рендеринг gsp с встроенным jquery
- 7. : ПРЕДУПРЕЖДЕНИЕ: Не удалось инициализировать эмуляцию OpenglES, используя программный рендеринг
- 8. Программный UIView с subview не рендеринг в правильном положении
- 9. Перезагрузка только gsp внутри div другого gsp
- 10. Программный программный контроллер подсмотра
- 11. Программный программный режим отладки
- 12. «Используется для вариаций» программный программный
- 13. Программный программный выбор артефактов Maven
- 14. Программный программный вывод сетевого интерфейса
- 15. Akeneo: программный программный фильтр сетки
- 16. XtraReport DocumentViewer программный программный документ
- 17. Программный программный модуль Suspend Bitlocker?
- 18. Программный программный код диапазона Index
- 19. Подпишитесь на внешний программный программный
- 20. Swift - Программный программный план загрузки
- 21. Grails - рендеринг модели и переменной
- 22. Использование одного вида gsp в других представлениях gsp
- 23. Пропустить рендеринг вида в графе
- 24. Grails рендеринг плагина преобразование HTML/GSP из облака или из строки
- 25. Тег «Выбрать» в gsp
- 26. Перенаправление на GSP неудачу
- 27. GSP taglib import
- 28. (Grails) GSP с semanticui
- 29. Grails Ajax визуализировать GSP
- 30. Использовать контроллер из gsp?
На самом деле я хочу, чтобы «createTemplate» принимал сам текст GSP как входной, а не uri файла. Но это так. Благодарю. – tuler
, если код шаблона находится в строке, рассмотрите возможность использования SimpleTemplateEngine http://groovy.codehaus.org/api/groovy/text/SimpleTemplateEngine.html –