Использование HTML-компоновщиков в Grails вместо GSP - PullRequest
3 голосов
/ 03 декабря 2009

Есть ли способ использовать Groovy Builder для создания файлов 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 придумано просто для того, чтобы дать идею ..

Ответы [ 3 ]

5 голосов
/ 03 декабря 2009

Выполните поиск компоновщика в разделе веб-слоя руководства пользователя grails. Там есть пример, который показывает вам, как это сделать с помощью построителя xml.

1 голос
/ 03 декабря 2009

У меня нет полного ответа для вас, но я подозреваю, что ключ получит доступ к «средствам просмотра». В обычном приложении 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, и он должен работать, как описано выше.

0 голосов
/ 04 декабря 2009

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, и вы можете передать ему дополнительные вещи.

Так что то, о чем вы просите, безусловно, возможно, хотя я не уверен, что это закончится победой. Я бы посоветовал вам, возможно, больше взглянуть на TagLibs в сочетании с Templates и SiteMesh Layouts - это может значительно упростить ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...