我为grails应用程序定义了一个布局'mainTemplate'。我使用g:layoutHead
(因此我的页面将其头部添加到布局中)。
但是当我查看主页的来源时,我仍然会获得布局的元信息。
虽然我在定义的模板中呈现了我的页面,但我认为grails应该已经删除了这个元信息。
http://grails.org/doc/1.3.x/ref/Tags/layoutHead.html
如何删除它?或者我在这里遗漏了什么?
答案 0 :(得分:4)
如果您使用<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个字符,这对我来说似乎非常微观优化。)
答案 1 :(得分:0)
我最终必须删除<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,但如果它让验证者感到高兴,我可以继续研究更大更好的问题。