【slim3】画面遷移のための”Controller”−(2)実装方法
前回、slim3 の画面遷移制御用コンポーネントである
”Controller”の生成方法をまとめました。
今回は、この Controller の実装方法をざっと見てみます。
1.Controllerの基本的な構成
Controller の基本的な要件は、以下の3点です。
(1)org.slim3.controller.Controller を継承(extend)する。
(2)org.slim3.controller.Navigation を戻り値として返す
run() メソッドをオーバーライドする。
(3)run() メソッド内で、遷移先のパスを返す。
ちなみにこれらは、Ant で自動的に生成されます。
2.パラメータの取得方法
画面などからの入力値を取得するには、
次の2つの方法があります。
(1)HttpServletRequest 等から取得する方法
通常の Servlet と同様、HttpServletRequest 等の getAttribute() メソッドなどを呼び出すことで、入力値を取得することができます。
HttpServletRequest 等へのアクセス方法は、
「3.HttpServletRequest等へのアクセス方法」をご参照下さい。
(2)Controller の専用メソッドを利用する方法
Controller クラスには、asString() や asInteger() など、HttpServletRequest に格納された値を取得するためのメソッドが型毎に用意されています。
これらを呼び出すことで、入力値を取得することができます。
ちなみに次の2つは、同じ意味になります。
- (String) request.getAttribute("abc")
- asString("abc")
3.HttpServletRequest等へのアクセス方法
HttpServletRequest・HttpServletResponse・ServletContext には、それぞれ専用のアクセス用クラスが slim3 で用意されています。
(1)HttpServletRequest
org.slim3.util.RequestLocator クラスの get() メソッドを呼び出します。
(2)HttpServletResponse
org.slim3.util.ResponseLocator クラスの get() メソッドを呼び出します。
(3)ServletContext
org.slim3.util.ServletContextLocator クラスの get() メソッドを呼び出します。
(4)【参考】HttpSession
HttpServletRequest の getSession() メソッドで取得します。
4.入力値の検証方法(validation)
入力値の検証は、org.slim3.controller.validator.Validators クラスで行います。
入力値の検証手順は、次の通りです。
(1)Validators のインスタンスを生成する。
引数には、HttpServletRequest、または検証対象が格納された Map を渡します。
(2)add() メソッドで、入力値とそれに対する検証方法を追加する。
- 引数の1つめに、検証対象の入力値のキーを指定します。
- 引数の2つめ以降に、検証方法を追加します。(可変長引数)
具体的には、以下の例をご確認下さい。
Validators v = new Validators(RequestLocator.get()); // 必須チェック・100 文字以内のチェックを実施 v.add("name", v.required(), v.maxlength(100));
5.初期画面用のController
アプリケーションの初期画面表示を Controller で制御したい場合は、ルートパッケージ/controller ディレクトリに、IndexController クラスを用意します。
6.【参考】Controllerの実装例
package xxx.yyy.controller.order; import org.slim3.controller.Controller; import org.slim3.controller.Navigation; public class OrderController extends Controller { @Override public Navigation run() { // 入力値検証(validation) Validators v = new Validators(RequestLocator.get()); v.add("name", v.required(), v.maxlength(100)); if (!v.validate()) { // 入力値検証失敗時 // この呼び方だと、/war/order.jsp へ遷移する。 return forward("order.jsp"); } // 入力値検証成功時 // 必要に応じて Service を呼び出し、 // ビジネスロジックを実施する。 new OrderService() .order(new Order(asString("name"))); /* * この呼び方だと、 * /war/WEB-INF/view/order/orderComplete.jsp * へ遷移する。 */ return forward( "/WEB-INF/view/order/orderComplete.jsp"); } }
次の予定
次は、Controller の UT について考えたいと思います。