libro
www.tuyano.com
Slim3によるGAE/J開発入門

コントローラーとビューの基本 (4/5)

作成:2013-12-07 15:55
更新:2013-12-07 15:55

■コントローラーからビューへの値の受け渡し

では、両者の連携を確認してみましょう。まずは基本ということで、コントローラーで用意した値をビューに受け渡し表示させてみます。

例として、IndexControllerindex.jspを以下に掲載のように書き換えてください。ページをリロードすると、コントローラー側で用意したメッセージが表示されます。ごく簡単ですが、値の受け渡しの仕組みはこれでわかりますね。

●Slim3の暗黙オブジェクト?
コントローラー側からチェックしましょう。runメソッドを見ると、以下のような非常に見慣れた処理で値を設定していることがわかります。
request.setAttribute("msg", "Welcome to Slim3!<br>ようこそ、Slim3へ!");
超おなじみのrequest.setAttributeですね。これでHttpServiletRequestにアトリビュートとして値を保管していたのですね。なんのことはない、JSP/サーブレットでいつもやっている処理です。Slim3のコントローラーには、コントローラーとビューの間を介在する特別な機能などが用意されているわけではありません。おなじみのJSP/サーブレットのやり方をそのまま使えばいいのです。

……あれ? でも、よく見ると、runメソッドでは引数に何も用意されていません。サーブレットではHttpServletRequestHttpServletResponseが引数に用意されていましたが、これはまるでJSPの暗黙オブジェクトでも使っているような書き方です。

種を明かせば簡単で、要するにControllerクラスにrequestというフィールドが最初から用意されていたのです。Controllerには、以下のような多用されるオブジェクトがすべてフィールドとして用意されています。

request――HttpServletRequestインスタンスを保管したフィールド
response――HttpServletResponseインスタンスを保管したフィールド
servletContext――ServletContextインスタンスを保管したフィールド

とりあえず、この3つがあれば何とかなりますね。ここではrequestを使い、値を保管していたというわけです。

ビュー側を見てみると、${msg}というように式言語(EL)を使って値をそのまま書き出していることがわかります。こちらでも、JSPのいつものやりかたそのままなのです。

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

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>


※関連コンテンツ

「Slim3によるGAE/J開発入門」に戻る