Это может быть ошибкой, но, согласно документации, тег include специально разработан для включения ответа другого контроллера / действия или представления в текущий ответ, а не только дополнительных GSP.Если вы хотите «включить» другой GSP на свою страницу, вам действительно следует использовать тег render.Я убедился, что ваш код корректно работает с тегом рендеринга и переименовывает include.gsp
в _include.gsp
, а также делает тег <g:render model="${otherModel}" template="include" />
.Я получил следующий вывод:
Эти данные поступают из модели:
content: content ...
Использование g: render: Эти данные поступаютиз включенной модели:
content: includeModel ...
Я также попытался добавить еще одно действие в контроллер, чтобы вернуть включенный контент и выполнить рендеринг include.gsp, а затем с помощьюg: включить тег для вывода, что на странице, и это работает:
def include() {
def includeModel = [:]
includeModel.content = 'includeModel...'
includeModel
}
А затем в index.gsp я добавил:
<g:include action="include"/>
И я получил:
Эти данные поступают из модели:
content: content ...
Использование g: render: Эти данные поступают из включенной модели:
content: includeModel ...
Использование g: include с действием. Эти данные поступают из включенной модели:
content: includeModel ...
Такжевам не нужно указывать render (view: 'viewname, ...) в вашем контроллере, если представление совпадает с именем метода в контроллере.Вы можете просто вернуть модель, и Grails автоматически выберет файл GSP с тем же именем, что и действие контроллера.
При этом все равно кажется, что вы пытаетесь сделать с тегом includeдолжен работать, и я не могу объяснить, почему это не так (а исходный код тега не отображается внизу документов, как это должно быть).Я бы порекомендовал заполнить JIRA, если тег рендеринга вам не подходит.