Play frameworkのviewを使う

このエントリはPlay frameworkひとりアドベントカレンダーの12日目です。

Play frameworkでviewをごにょってみましょう。

ブツは /app/views/ 配下にあります。

デフォルトで、

  • main.scala.html
  • index.scala.html

の2ファイルがありますよね。

ファイル名から分かる通り、 Scala です。はい。残念ながら。。。

scalaなので、実行時には一度コンパイルされます。
コンパイルされて、1ファイルが1クラスに変換されます。
なので、 Javaの1クラスの最大サイズの制約 を受けますのでご注意ください。
ファイルサイズの大きいviewは作成できませんのであしからず。

classだからこそ、controllerから views.html.<ファイル名>#render で呼び出せるのです。

このクラスは初回アクセス時か、 play compile したときに生成されます。
Eclipse上でコンパイルエラーになってて気持ち悪い場合は、 play compile した上で、 Eclipse上でプロジェクトを再読み込み(F5:refresh)してみてください。
/target/scala-2.9.1/classes_managed がビルドパスに入っていればエラーが消えるはずです。

ではここから中身を見てみましょう。

main.scala.html

scalaというだけで取っ付きにくい感じはしますが、内容は簡単です。

1行目に main#render の引数を定義します。
Scala文法なのでJavaな私にはわかりづらいのですが、

  • title という名前の、String型の変数
  • content という名前の、Html型の変数

を定義しています。

定義した変数は、HTMLの中で @変数名 で呼び出してます。

@(title: String)(content: Html)




    
        @title
        
        
        
</head>
<body>
    @content
</body>

index.scala.html

こちらも簡単。下記の動作をしています。

  • index#render の引数は message という名前の、String型の変数
  • 下記を引数として渡して main を呼び出し – title として "Welcome to Play 2.0"contents として @play20.welcome(message, style = "Java") の結果
@(message: String)

@main("Welcome to Play 2.0") {
    
    @play20.welcome(message, style = "Java")
    
}

いじってみる

index.scala.htmlを下記のように変更してみましょう。

@(message: String)

@main("Welcome to Play 2.0") {
    
    
@message
}

そして、controllerで views.html.index.render を呼び出します。

	public static Result index() {

		return ok(views.html.index.render("あれやこれや"));
	}

ブラウザで http://localhost:9000/ にアクセスしてみると…こんな感じで出る、はずっ!

ソースを見ると、 main.scala.html に定義したjqueryの読み込みなども取り込まれているのが変わります。
やったねヽ(`▽´)/


See also