2011-01-12 3 views
0

Я определил макет, 'mainTemplate' для моего приложения grails. Я использую g:layoutHead (поэтому мои страницы добавляют свой раздел главы к макетам).Как удалить метатег для макета?

Но когда я заглядываю в источник своей домашней страницы, я до сих пор получаю метаинформацию для макета.

Хотя я получаю свою страницу в определенном шаблоне, но я полагаю, что Grails должен был удалить эту метаинформацию.

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

Как удалить? Или я чего-то не хватает?

+0

Можете ли вы уточнить * почему * вы хотите удалить тег ''? –

+0

Его не очень нужно было удалить, но я надеялся, что этого не должно было быть, я чувствовал, что что-то пропустил, или это была какая-то ошибка. – Vishal

ответ

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 символов провод, который кажется довольно микро-оптимизацией-доволен мне).

+0

Спасибо, Роб, это поможет. Его много работы, хотя и меняют его на все мои ВСП. – Vishal

0

Мне пришлось удалить тег <meta> на соответствие с нашим валидатором WCAG .

Я добавил элемент в одну из моих библиотек тегов, чтобы сделать его удобным.

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, но если это делает валидатор счастливым, я могу двигаться дальше к более и более проблем.