Я просматривал книгу «Полное руководство по Граалю» (Роше / Браун), и в главе 04 эта загадочная вещь, называемая «макет», появилась без каких-либо объяснений. (И в указателе нет «макета». Насколько я знаю, это никогда не объясняется.)
Как система узнает, что страницы нужно «унаследовать» от layout / main.gsp? В указателе нет ничего о «раскладках», и, кажется, он только что появился.
В их примере приложения, на простом сайте магазина, сопоставления URL-адресов для / домашней страницы говорят
"/"(controller:"store")
и сохранить закрытие пустого "индекса" контроллера
package com.g2one.gtunes
class StoreController {
def index = {
}
}
просто сообщает ему отобразить store / index.gsp
В store / index.gsp всего несколько строк HTML; макет не включается ни в одну директиву
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="layout" content="main">
<title>gTunes Store</title>
<g:javascript library="prototype"></g:javascript>
</head>
<body id="body">
<h1>Your online music store and storage service!</h1>
<p>Manage your own library, browse music and purchase new tracks as they become available</p>
</body>
</html>
Когда я запускаю образец, страница, показанная для «/», не просто этот простой HTML, это содержимое «layouts / main.gsp» с этой информацией, волшебным образом вставленной в него.
Я не вижу, как информация в layout / main.gsp применяется к странице, как элементы смешиваются друг с другом. Я просматривал книгу страницу за страницей, и эта функция просто «появилась» без каких-либо объяснений.