0

grails アプリケーションのレイアウト「mainTemplate」を定義しました。私は使用しますg:layoutHead(私のページはヘッダーセクションをレイアウトに追加します)。

しかし、ホームページのソースを調べると、レイアウトのメタ情報がまだ表示されます。

定義されたテンプレートでページがレンダリングされますが、grails はこのメタ情報を削除する必要があると思います。

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

どうすれば削除できますか? それとも、ここで何か不足していますか?

4

2 に答える 2

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(スキャフォールディングを使用している場合)。正直なところ、最終ビューからタグを削除することは、いくつかの非常に例外的なケース (たとえば、「レイアウト」との名前の競合、またはこれらの余分な ~35 文字がネットワーク経由で送信されないようにする必要が<meta>ある場合など) を除いて、ほとんど不要に思えます。私にはかなりマイクロ最適化に満足しているようです)。

于 2011-01-12T15:23:07.500 に答える
0

WCAGバリデーター1<meta>に準拠するために、タグを削除する必要がありました。

便利にするために、タグ ライブラリの 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 であるとは確信していませんが、バリデーターを満足させることができれば、より大きくより良い問題に進むことができます。

于 2014-02-27T21:21:08.737 に答える