Я просматривал книгу «Полное руководство по Граалям» (Роше / Браун), и в главе 04 эта таинственная вещь, называемая «макет», просто появилась без объяснения причин. (И в индексе нет «макета». Насколько я знаю, он никогда не объясняется.)
Как система знает, как "наследовать" страницы из layout / main.gsp? В индексе нет ничего о «раскладках», и, похоже, он только что появился.
В их примере приложения, простого сайта магазина, сопоставления URL для / homepage говорят
"/"(controller:"store")
и пустое закрытие "index" контроллера хранилища
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 применяется к странице, как элементы смешиваются вместе. Я просматривал книгу постранично, и эта функциональность просто «появилась» без объяснения причин.