2011-06-21 18 views
2

私のGrails 1.3.7アプリでは、ビューから周囲のHTMLを取り除くためにテンプレートを使いたいと思います。しかし、GSP変数の代入は包含されたbody()では機能しません。どうすれば次のようなことができますか?Grailsテンプレートbody()でGSP変数を割り当てる方法は?

_ aTemplate.gsp:

<div class="example"> 
    <% out << body() %> 
</div> 

aView.gsp:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta name="layout" content="main" /> 
</head> 
<body> 
    <g:set var="foo" value="${42}"/> 
    <% assert foo == 42 : foo %> 

    <tmpl:/aTemplate> 
     <g:set var="bar" value="${6}"/> 
     <% assert bar == 6 : bar %> 
    </tmpl:/aTemplate> 
</body> 
</html> 

barの割り当ては動作しません:barアサーションは失敗し、私はhttp://localhost:8080/myApp/aView.gsp

を得るとき
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: 
Error executing tag<g:render>: Assertion failed: 
(bar == 6). Values: bar = null 
at /Users/jbeutel/proj/grailsSandboxes/myApp/grails-app/views/aView.gsp:13 

テンプレートbody()を正常に動作させるにはどうすればよいですか?

また、バランスを保ちながら周囲のHTMLを除外することができる他の方法がありますか?私のユースケースはトップレベルではないので、私はレイアウトを試していません。私はテンプレートファイルの代わりにTagLibクロージャを使用する場合、変数の割り当てが動作しますが、クロージャに多くのHTMLを入れたくないので、テンプレートファイルにアンバランスなHTMLを置く必要があります(つまり、体の後ろに)。より良い方法がありますか?

+2

<g:render template="/layouts/header" model="['hidelogin':true]"/> 

その後、login.gspページ上にある場合、私はこれが私の共通ヘッダーでのログイン」リンクを非表示にするか、あなたが見ています?あなたの問題を解決するのに少し役立つかもしれないように思えます。私はあなたが記述している状況でそれらを使用していないので(実際の回答を投稿するのに十分な自信がない)、[''](http://grails.org/doc/最新の/ ref/Tags/applyLayout.html)は、おいしい機能を提供するようです。それ以外の場合は、同様の方法で使用した場合に観察しているのと同じ動作に悩まされることはありません(ただし、わかりません)。ちょうど提案。 –

+0

ありがとう!そのインラインレイアウトが機能しました。 '<%out << body() %>'を ''に変更し、 'view/_aTemplate.gsp'を' layouts/aLayout.gsp'に移動し、 ' '。レイアウトとボディの両方のコードが動作しているようです。レイアウト用のパラメータマップを用意する必要もありませんでした。 –

+0

しかし、私はそれに問題があります。レイアウトはコントローラからモデルのみを取得します。私は、aView.gspがpageProperty文字列のほかに何かを渡す方法は見当たりません。 –

答えて

1

.gspから変数を共有テンプレートに渡すことができます。共有テンプレートは、次のように考えることができます。彼らはどこまでレイアウトを使用してに_header.gsp

<g:if test="${!hidelogin}"> 
    //show your login link 
</g:if>