コントローラーとビューの基本 (4/5)
作成:2013-12-07 15:55
更新:2013-12-07 15:55
更新:2013-12-07 15:55
■コントローラーからビューへの値の受け渡し
では、両者の連携を確認してみましょう。まずは基本ということで、コントローラーで用意した値をビューに受け渡し表示させてみます。
例として、IndexControllerとindex.jspを以下に掲載のように書き換えてください。ページをリロードすると、コントローラー側で用意したメッセージが表示されます。ごく簡単ですが、値の受け渡しの仕組みはこれでわかりますね。
●Slim3の暗黙オブジェクト?
コントローラー側からチェックしましょう。runメソッドを見ると、以下のような非常に見慣れた処理で値を設定していることがわかります。
……あれ? でも、よく見ると、runメソッドでは引数に何も用意されていません。サーブレットではHttpServletRequestとHttpServletResponseが引数に用意されていましたが、これはまるでJSPの暗黙オブジェクトでも使っているような書き方です。
種を明かせば簡単で、要するにControllerクラスにrequestというフィールドが最初から用意されていたのです。Controllerには、以下のような多用されるオブジェクトがすべてフィールドとして用意されています。
request――HttpServletRequestインスタンスを保管したフィールド
response――HttpServletResponseインスタンスを保管したフィールド
servletContext――ServletContextインスタンスを保管したフィールド
とりあえず、この3つがあれば何とかなりますね。ここではrequestを使い、値を保管していたというわけです。
ビュー側を見てみると、${msg}というように式言語(EL)を使って値をそのまま書き出していることがわかります。こちらでも、JSPのいつものやりかたそのままなのです。
例として、IndexControllerとindex.jspを以下に掲載のように書き換えてください。ページをリロードすると、コントローラー側で用意したメッセージが表示されます。ごく簡単ですが、値の受け渡しの仕組みはこれでわかりますね。
●Slim3の暗黙オブジェクト?
コントローラー側からチェックしましょう。runメソッドを見ると、以下のような非常に見慣れた処理で値を設定していることがわかります。
request.setAttribute("msg", "Welcome to Slim3!<br>ようこそ、Slim3へ!");超おなじみのrequest.setAttributeですね。これでHttpServiletRequestにアトリビュートとして値を保管していたのですね。なんのことはない、JSP/サーブレットでいつもやっている処理です。Slim3のコントローラーには、コントローラーとビューの間を介在する特別な機能などが用意されているわけではありません。おなじみのJSP/サーブレットのやり方をそのまま使えばいいのです。
……あれ? でも、よく見ると、runメソッドでは引数に何も用意されていません。サーブレットではHttpServletRequestとHttpServletResponseが引数に用意されていましたが、これはまるでJSPの暗黙オブジェクトでも使っているような書き方です。
種を明かせば簡単で、要するにControllerクラスにrequestというフィールドが最初から用意されていたのです。Controllerには、以下のような多用されるオブジェクトがすべてフィールドとして用意されています。
request――HttpServletRequestインスタンスを保管したフィールド
response――HttpServletResponseインスタンスを保管したフィールド
servletContext――ServletContextインスタンスを保管したフィールド
とりあえず、この3つがあれば何とかなりますね。ここではrequestを使い、値を保管していたというわけです。
ビュー側を見てみると、${msg}というように式言語(EL)を使って値をそのまま書き出していることがわかります。こちらでも、JSPのいつものやりかたそのままなのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※IndexController.java package com.tuyano.libro.myslim3app.controller; import org.slim3.controller.Controller; import org.slim3.controller.Navigation; public class IndexController extends Controller { @Override public Navigation run() throws Exception { request.setAttribute("msg", "Welcome to Slim3!<br>ようこそ、Slim3へ!"); return forward("index.jsp"); } } ※index.jsp <%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@taglib prefix="f" uri="http://www.slim3.org/functions"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Index</title> <link rel="stylesheet" type="text/css" href="/css/global.css" /> </head> <body> <h1>Hello Index !!!</h1> <p>${msg}</p> </body> </html>
※関連コンテンツ