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)
 
<!DOCTYPE html>
 
<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
        <script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    </head>
    <body>
        @content
    </body>
</html>

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") {
 
    <div style="color:red;">
        @message
    </div>
 
}

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

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

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

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

ads

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

ads