我有一个组件化的单页面webapp,它非常依赖g:applyLayout,g:include和g:layoutBody。我有一个workbench.gsp聚合了许多较小的widgetFoo.gsp文件。它们的结构使得每个窗口小部件定义其各自的JS和CSS依赖关系,并且无论是单独呈现还是通过workbench.gsp与其他窗口小部件聚合在一起,它都是完全可用的。
我正在从grails 2.2.1 grails 3.1升级并遇到问题。我在任何文档,堆栈溢出或论坛中都找不到任何解释。
以下代码的行为有很大不同,具体取决于我使用的Grails版本。
workbench.gsp
<html>
<head>
<meta name="layout" content="workbench" />
<title>Workbench TEST GSP</title>
</head>
<body>
<h1>Workbench</h1>
<div>
<g:applyLayout name="body-only">
<g:include
controller="workbench"
action="w1"
/>
</g:applyLayout>
</div>
</body>
</html>
布局/ workbench.gsp
<html>
<head>
<title><g:layoutTitle default="Heavy Meta"/></title>
<g:layoutHead/>
</head>
<body>
<g:layoutBody/>
</body>
</html>
布局/身体only.gsp
<g:layoutBody/>
widget1.gsp
<html>
<head>
<title>W1 - Grails 2 does not render this during layoutBody but Grails 3 does</title>
</head>
<body>
<h1>I am widget #1 - Hear me Roar!</h1>
</body>
</html>
Grails 2产生了这个:
<html>
<head>
<title>Workbench TEST GSP</title>
<meta name="layout" content="workbench">
</head>
<body>
<h1>Workbench</h1>
<div>
<h1>I am widget #1 - Hear me Roar!</h1>
</div>
</body>
</html>
Grails 3产生了这个:
<html>
<head>
<meta name="layout" content="workbench">
<title>Workbench TEST GSP</title>
</head>
<body>
<h1>Workbench</h1>
<div>
<title>W1 - Grails 2 does not render this during layoutBody but Grails 3 does</title>
<h1>I am widget #1 - Hear me Roar!</h1>
</div>
</body>
</html>
在这个简单的例子中看起来很小,但是,当我在页面上放置多个小部件时,它会变得更糟。当他们的头部元素包括并且ONE和TWO具有重叠的依赖关系时,所有的地狱都会破裂。所以,我认为我会首先将问题呈现在最基本的形式中并从那里开始。
任何见解?