Использование конструкторов HTML в Grails вместо GSP
Вопрос
есть ли способ использовать отличные строители создавать файлы JSP в приложении Grails, сохраняя при этом достаточную степень интеграции?
Чтобы объяснить лучше:по умолчанию Grails использует gsp
файлы хорошие, но довольно многословные..
<div class="clear">
<ul id="nav">
<li><g:link controller="snippets" action="list">Snippets</g:link></li>
<li><g:link controller="users" action="list">Users</g:link></li>
<li><g:link controller="problems" action="list">Problems</g:link></li>
<li><g:link controller="messages" action="list">Messages</g:link></li>
</div>
<div id="content">
есть ли способ использовать groovy.xml.MarkupBuilder
это превратило бы предыдущую часть в
div(class:'clear') {
ul(id:'nav') {
li { g_link(controller:'snippets', action:'list', 'Snippets') }
// and so on
Конечно g_link
придумано просто для того, чтобы дать идею..
Решение
Выполните поиск застройщика под раздел веб-слоя руководства пользователя Grails.Там есть пример, который показывает, как именно это сделать с помощью построителя xml.
Другие советы
У меня нет для вас полного ответа, но я подозреваю, что ключом будет получение доступа к «преобразователям представлений».В обычном приложении SpringMVC они настраиваются в views.properties
(или views.xml
) следующее:
csv=com.example.MyCSVResolver
xml=com.example.MyXMLResolver
audio=com.example.MySpeechResolver
В обычном приложении SpringMVC вы возвращаете что-то вроде new ModelAndView(myModel, 'csv')
из действия контроллера.
Это привело бы к CSVResolver
класс, который нужно вызвать, передав ему данные в myModel.Помимо содержания данных для визуализации, myModel
скорее всего, также будет содержать некоторые параметры форматирования (например,ширину столбцов).
Spring ищет в файле представлений ключ, соответствующий имени представления.Если соответствие не найдено, по умолчанию он просто отображает JSP с именем представления и передает ему данные модели.
Теперь вернемся к Grails... помните, что Grails на самом деле представляет собой просто Groovy API поверх SpringMVC, и к большинству функций SpringMVC можно получить доступ из Grails.Итак, если вы можете понять, как изменить файл представлений, просто измените действия вашего контроллера, чтобы они возвращали соответствующий ModelAndView
экземпляр, и он должен работать, как описано выше.
GSP позволяет запускать произвольный код Groovy внутри скобок <% %>.Итак, вы можете получить что-то вроде этого (пример заимствован со страницы, на которую ссылается BlackTiger):
<% StringWriter w = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(w)
builder.html{
head{
title 'Log in'
}
body{
h1 'Hello'
builder.form{ }
}
}
out << w.toString()
%>
Обратите внимание, что приведенный выше код вызывает тег g:form, и вы можете передать ему дополнительные данные.
Так что то, о чем вы просите, безусловно, возможно, хотя я не уверен, что это в конечном итоге окажется победой.Я бы посоветовал вам больше взглянуть на библиотеки тегов в сочетании с шаблонами и макетами SiteMesh - они определенно могут значительно упростить ситуацию.