libro
www.tuyano.com
初心者のためのPlay Framework入門

コントローラーとビュー[Java編] (2/4)

作成:2013-02-17 09:50
更新:2013-02-17 09:50

■ControllerからViewへ値を渡す

では、実際にコントローラーを作ってみましょう。下のリスト欄に、簡単なコントローラーのソースコードを記述しておきました。これを「Application.java」という名前で「controllers」フォルダ内に配置してください。

また、既に作成してある「Application.scala」は、アプリケーション外にファイルを移動するなどして読み込まれないようにしておきましょう。同じApplicationクラスが2つあると正常に動作しないので注意してください。

また、ビューテンプレートであるindex.scala.htmlも修正しておきましょう。下のリスト欄を参考に記述してください。見ればわかるように、こちらはScalaをスクリプトレットとして利用する形のままです。Javaで記述する場合も、ビューだけはScalaを使って記述する必要があります。こちらは、JSPなどを利用することはできないのです。

さて、今回はindexメソッドを1つだけ用意しておきました。ここで行なっているのは非常に単純な処理です。タイトルとメッセージのテキストを変数に用意し、index.scala.htmlのビューテンプレートをレンダリングしてResultを返す、といったものです。

Ok」は、問題なくリクエストが完了した場合の結果を示すResultを返すメソッドです。そしてその引数にはindexインスタンスの「render」が呼び出されています。indexインスタンスは、「index.scala.html」によって自動生成されるオブジェクトです。「render」メソッドは、引数に指定した値をビューテンプレートに受け渡す形でindex.scala.htmlをレンダリングし結果を返すものです。

これらのOkindexrenderといったメソッドやインスタンスは、Scalaのときにも登場しました。使い方といい働きといい、全く同じものだと考えてよいでしょう。

renderの引数で渡された値は、そのままビューテンプレートの冒頭に用意されている変数に受け渡されます。そしてそれらを使ってビューの表示を行います。このあたりは、Scalaベースでのコントローラー&ビューのところで説明した通りです。

最後に、routesでのルート情報の記述についても触れておきましょう。Applicationクラスのindexメソッドを公開するには、以下のようにroutesに記述しておきます。
GET     /    controllers.Application.index

これで、/indexアクションが割り当てられます。見ればわかるように、Scalaの場合と全く同じです。基本的にScalaであろうとJavaであろうと、書いたコントローラーのルート設定の仕方は全く同じなのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※Application.javaのソースコード

package controllers;

import play.*;
import play.mvc.*;
import views.html.*;

public class Application extends Controller {

    public static Result index() {
        String title = "Play Sample";
        String message = "これはJavaを使ったPlayのサンプルです。";
        return ok(index.render(title, message));
    }
}


※index.scala.htmlのソースコード

@(title: String, message: String)

@main(title) {
    <h1>@title</h1>
    <p>@message</p>
}

※関連コンテンツ

「初心者のためのPlay Framework入門」に戻る