コントローラーとビューの基本 (3/5)
作成:2013-10-12 10:58
更新:2013-10-12 10:58
更新:2013-10-12 10:58
■コントローラーとビューのやりとり
ビューテンプレートは、単なるHTMLではなく、GSPです。これは、JSPと同じように式言語を書いたり、Groovyによるコードを埋め込んだりして、それをレンダリング時に実行して表示を作成することができるのです。
まずは「式言語」から使ってみましょう。JSPを使ったことがあれば、式言語はおなじみですね。${○○}というようにして、変数や式などを記述し、その評価した結果をその場に出力するものです。GSPでも式言語は全く同じ感覚で使うことができます。
ビューテンプレートの式言語で使われる変数などは、コントローラー側であらかじめ用意しておくことができます。コントローラーのアクションで、マップとして必要な値を用意しておけば、それぞれの値のキーを変数名としてビューテンプレート側で使えるようになります。
マップというのは、いわゆる連想配列のことです。配列の各要素に「キー」と呼ばれる名前をつけて保存するもので、Groovyでは以下のように記述します。
下に簡単なサンプルを挙げておきました。index.gspとHeloControllerをそれぞれ書き替えて、アクセスしてみてください。
ここでは、indexアクションに用意しておいた連想配列の値をビューテンプレート側で表示しています。indexでは、3つの値を保管する連想配列を用意していますね。これがそのままビューテンプレートに渡されるのです。
Groovyのメソッドでは、「最後に評価した結果がそのまま返値として返される」という性質があります。つまり、return ○○;というように書かなくても、ただメソッドの最後に値を書いておけば、それがそのまま返されるのですね。ここでは連想配列の記述だけが書かれていますから、それがそのまま返されたわけです。
アクションでは、このように連想配列を返すと、対応するビューテンプレート内でその値が変数として利用できるようになります。例えばこの例では、title、msg、dateというキーの値が用意されていますから、これらが変数として使えるようになるわけです。ビューテンプレートを見ると、
まずは「式言語」から使ってみましょう。JSPを使ったことがあれば、式言語はおなじみですね。${○○}というようにして、変数や式などを記述し、その評価した結果をその場に出力するものです。GSPでも式言語は全く同じ感覚で使うことができます。
ビューテンプレートの式言語で使われる変数などは、コントローラー側であらかじめ用意しておくことができます。コントローラーのアクションで、マップとして必要な値を用意しておけば、それぞれの値のキーを変数名としてビューテンプレート側で使えるようになります。
マップというのは、いわゆる連想配列のことです。配列の各要素に「キー」と呼ばれる名前をつけて保存するもので、Groovyでは以下のように記述します。
[キー:値, キー:値, ……]こうして必要な値を用意し、メソッドの最後に実行します。――では、実際にやってみましょう。
下に簡単なサンプルを挙げておきました。index.gspとHeloControllerをそれぞれ書き替えて、アクセスしてみてください。
ここでは、indexアクションに用意しておいた連想配列の値をビューテンプレート側で表示しています。indexでは、3つの値を保管する連想配列を用意していますね。これがそのままビューテンプレートに渡されるのです。
Groovyのメソッドでは、「最後に評価した結果がそのまま返値として返される」という性質があります。つまり、return ○○;というように書かなくても、ただメソッドの最後に値を書いておけば、それがそのまま返されるのですね。ここでは連想配列の記述だけが書かれていますから、それがそのまま返されたわけです。
アクションでは、このように連想配列を返すと、対応するビューテンプレート内でその値が変数として利用できるようになります。例えばこの例では、title、msg、dateというキーの値が用意されていますから、これらが変数として使えるようになるわけです。ビューテンプレートを見ると、
<h1>${title}</h1>
<h2>${msg}</h2>
<p>${date}</p>こんな具合に、それぞれの変数を式言語で出力していることがわかります。このように「コントローラー側のアクションで連想配列を返す→ビューテンプレートで変数を出力する」という基本的な流れ場わかれば、コントローラーで複雑な処理をして結果を表示する、といったことが簡単に行えるようになります。(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※HeloController
package gralisapp
class HeloController {
def index() {
[
'title':"Sample Page",
'msg':"これはサンプルですよ。",
'date':Calendar.getInstance().getTime()
]
}
}
※index.gsp
<!DOCTYPE html>
<html>
<head>
<title>Grails Helo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {color: #006600;}
h1 {background: #99ff99;font-size: 14pt;padding: 5px;}
h2 {font-size: 12pt; font-weight: bold;}
p {font-size: 10pt;}
</style>
</head>
<body>
<h1>${title}</h1>
<h2>${msg}</h2>
<p>${date}</p>
</body>
</html>
※関連コンテンツ