如何删除布局的元标记?

时间:2011-01-12 13:42:47

标签: grails groovy gsp meta-tags sitemesh

我为grails应用程序定义了一个布局'mainTemplate'。我使用g:layoutHead(因此我的页面将其头部添加到布局中)。

但是当我查看主页的来源时,我仍然会获得布局的元信息。

虽然我在定义的模板中呈现了我的页面,但我认为grails应该已经删除了这个元信息。

http://grails.org/doc/1.3.x/ref/Tags/layoutHead.html

如何删除它?或者我在这里遗漏了什么?

2 个答案:

答案 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,但如果它让验证者感到高兴,我可以继续研究更大更好的问题。