Использование конструкторов HTML в Grails вместо GSP

StackOverflow https://stackoverflow.com/questions/1841647

  •  12-09-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top