1

Gaelyk を使い始めたばかりです。

Spring MVC のように動作することを期待していました。モデル オブジェクトを controller.groovy に作成し、モデル オブジェクトを .gtpl にフォーマットします。

コントローラーでこれを行います

def model = new MyModel()
model.setMyId(2)

そして.gtplで私はこれを行います

<h1>Test ${model.myId}</h1>
<p>
    Model object is ${model}
</p>

ただし、これを実行するとMissingPropertyExceptionが発生します

groovy.lang.MissingPropertyException: No such property: model for class: SimpleTemplateScript1

チュートリアルの例では、モデル オブジェクトは、.gtpl からアクセス可能なjavax.servlet.http.HttpServletRequestの属性に組み込まれています。

これは本当にコントローラとテンプレートの間でデータを渡す唯一の方法ですか? Request (または Response) オブジェクトの汚染を避けることができれば、すっきりした気分になります。

4

2 に答える 2

4

あなたの唯一のオプションはリクエストオブジェクトだと思います(あなたが言うように)。次のように変数をリクエスト オブジェクトに設定します。

def model = new MyModel()
model.setMyId(2)
request.model = model

forward 'view.gtpl'

次に、次のview.gtplことを行います。

<h1>Test ${request.model.myId}</h1>
<p>
    Model object is ${request.model}
</p>

寿命が短いのでrequest、それが Request オブジェクトを汚染しているとは言いません ;-)

そして、(たとえば)セッションオブジェクトを使用するよりもはるかに優れています

PS: リクエスト オブジェクトを使用するようにドキュメントに記載されているため、このすべてがどのように機能するかはおそらく既にご存じだと思います:-/

于 2011-05-31T11:53:26.420 に答える
0

tim_yates 応答に追加すると、gtpl 全体を次のようにラップできます。

コントローラ:

request.model = [myId:123]

見る:

<% request.model.with{ %>
...
<p> this is my id: ${myId} </p>
...
<% } %>
于 2012-10-16T00:23:23.757 に答える