Я хочу создать макет для своего приложения Grails на основе этого руководства: http://grails.asia/grails-tutorial-for-beginners-layout-templates
Я создаю page.gsp со скелетом моей страницы:
<!DOCTYPE html>
<html>
<head>
<title><g:layoutTitle default = "Grails"/></title>
<style>
#header {background-color:#ffe0e0;text-align: center;}
#footer {background-color:#e0e0ff;text-align: center;}
</style>
<g:layoutHead/>
</head>
<body>
<div id = "header">HEADER</div>
<g:layoutBody/>
<div id = "footer">FOOTER</div>
</body>
</html>
И mainpage.gsp с основным содержанием:
<!DOCTYPE html>
<html>
<head>
<meta name = "layout" content = "page"/>
<title>I am a test page</title>
<link rel = "stylesheet" href = "${resource(dir: 'css', file: 'main.css')}" type = "text/css">
</head>
<body>
<p>Test page.</p>
</body>
</html>
Страница отображается в UrlMappings.groovy:
"/"(view:'/layouts/page')
Но когда я пытаюсь запустить свой проект, я всегда получал такое сообщение об ошибке:
URI/ Class java.lang.NullPointerException Message Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/layouts/page.gsp:4] Error executing tag : [views/layouts/page.gsp:4] Error executing tag : null Caused by null
Без него работает нормально. Как я могу решить эту проблему?




Вы НЕ должны отображать страницы декораторов напрямую (из каталога grails-app/views/layouts). Их цель - украсить ДРУГИЕ страницы.
Итак, вместо ерунды вроде
"/"(view:'/layouts/page')
вы должны использовать что-то вроде:
"/"(view:'/mainpage')
так что ваш mainpage.gsp украшен layouts/page.gsp.
Какую версию Grails вы используете?