Creamyのコントローラは他のWebアプリケーションフレームワークで使われるコントローラと同様の意味を持っています。 また、Creamyではビュー等からパスに対するリクエストという形でコントローラにアクセスするため、 よりWebアプリケーションフレームワークを連想させる使用感となっています。
コントローラはcontrollersパッケージの配下にクラスを配置してください。 コントローラクラスのクラス名はメソッド呼び出し時のパスに利用されるので、 それを踏まえてクラスを命名してください。
CreamyにおけるコントローラクラスはControllerクラスを継承する必要があります。 以下、に例を示します。ここでの例ではApplicationクラスとします。
1 2 | public class Application extends Controller {
}
|
Creamyにおけるコントローラの役割はビューとモデルを仲介、制御することです。 具体的には、モデルへのアクセス、ビューとのパラメータのやりとりとその遷移の制御などです。 コントローラを実装する上でそれらを行うためのルールとControllerクラスが提供する便利な機能を紹介します。
まずは実際のコントローラの例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Application extends Controller {
private Computer computer;
//リクエスト先パスは /Application/show/{ id } になります --- (1)
public Result show(Integer id) {
if (id == null) {
return badRequest(this); //不正なリクエストとして結果を返す。 ---- (2)
}
computer = Computer.find.byId(id);
if (computer == null) {
//redirectTestにリダイレクトします。 ---- (3)
return redirect("/Application/redirectTest");
}
// 正常終了 editに対応するビューが表示される。 ---(4)
// この場合は、/views/application/show.vm.fxmlと
// /views/application/show.java
return ok(this);
}
//( 3)でリダイレクトされた場合呼び出される。
public Result redirectTest() {
// 正常終了 redirectTestに対応するビューが表示される。
// この場合は、/views/application/rediretTest.vm.fxmlと
// /views/application/rediretTest.java
return ok(this);
}
}
|
パスで実行されるメソッドが決定します (1)
コントローラのメソッド呼び出しは、ビューからのリクエストされたパスで決定されます。 パスはWebのURLやファイルパスをイメージしてください。 パスとメソッドの対応は “/コントローラ名/メソッド名/パラメータ1/パラメータ2/...” のようになっています。 以下、いくつか例を示します。
パス | コントローラ名 | シグネチャ |
/Application/show/{ id } | Application | public Result show(String id) |
/Application/show/{ id }/{ name } | Application | public Result show(String id, String name) |
/Test/exec | Test | public Result exec() |
パスで引数を渡します (1)
先に挙げた例のようにリクエスト時のパスにメソッドの引数を渡すことが可能です。 また、大量のパラメータを渡す場合など、パスを利用しにくい場合は、 ポストすることで別途パラメータを取得出来ます。 パスを利用しないパラメータの取得方法は後述します。
creamy.mvc.Resultを返す際、creamy.mvc.Resultを取得する3つの方法があります。
メソッド名 | 引数 | 概要 |
---|---|---|
ok | Controller or Activity or Object | |
badRequest | Controller or Activity or Object | |
redirect | String | |
正常終了時はokメソッド、異常なリクエストの場合はbadRequestメソッド、 | ||
画面遷移が必要な場合はredirectメソッドの戻り値を返してください。 |
規約により表示されるビューを決定します (4)
正常終了時はコントローラ、メソッドに対応したビューが自動的に決定され表示されます。 基本的には、’views.コントローラ名.メソッド名.vm.fxml’と’views.コントローラ名.メソッド名.java’が 対応するビューとなります。 規約の詳細については こちら を参照してください。
パス以外でもパラメータを渡せます
フィールド変数paramsを参照することで、Formコントロールからポストされたパラメータを取得できます。 Formコントロールについての解説は こちら を参照してください。
以下、簡単な実装例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class PostTest extends Controller {
//リクエスト先パスは /PostTest/post になります
public Result post() {
//ポストされたパラメータをparam(key)で取得します。
if (param("id") != null) {
computer = new Computer(param("Id"));
} else {
computer = new Computer();
}
//正常終了。createに対応するビューが表示されます。
return ok(this);
}
}
|