我为我的 grails 应用程序定义了一个布局“mainTemplate”。我使用g:layoutHead
(所以我的页面将它们的头部附加到布局中)。
但是当我查看主页的源代码时,我仍然会获得布局的元信息。
虽然我在定义的模板中呈现了我的页面,但我认为 grails 应该删除了这个元信息。
http://grails.org/doc/1.3.x/ref/Tags/layoutHead.html
如何删除它?或者我在这里错过了什么?
如果您使用<meta>
标签来定义布局,那么它不容易移除。但是,您可以<g:applyLayout>
在视图中使用以避免使用<meta>
标记。
<!-- a GSP view, e.g. views/foo/index.gsp -->
<g:applyLayout name="main"><!-- value for "name" is the same as what you'd use in the meta tag -->
<html>
<head><title>My Decorated Page</title></head>
<body>
Some content
</body>
</html>
</g:applyLayout>
本质上,您所做的是<meta>
从视图中删除标签,然后用<g:applyLayout>
.
诚然,这是很多工作。您需要更新所有视图,并且还可能更新脚手架视图src/templates
(如果您正在使用脚手架)。老实说,<meta>
从最终视图中删除标签似乎在很大程度上是不必要的,除了一些非常特殊的情况(例如,与“布局”的命名冲突,或者您只需要防止那些额外的约 35 个字符通过网络发送,这对我来说似乎很微优化)。
我最终不得不删除<meta>
标签以符合我们的 WCAG 验证器1。
我在我的一个标签库中添加了一个项目以方便使用。
def wcagValidLayoutHead = {
def head = request["__sitemesh__page"].head
out << head.replaceAll(/<meta .*name=['"]layout['"].*\/>/, '')
}
然后像这样使用它:
<head>
<title><g:layoutTitle default="My Valid HTML Page"/></title>
<my:wcagValidLayoutHead/>
</head>
这有点小技巧,我确信正则表达式可以提高速度,但它确实有效。
1:我不相信它实际上是无效的 HTML,但如果它让验证器满意,我可以继续处理更大更好的问题。