QuickStart

はじめに

scenic3を使うには slim3 の開発環境が必要です。slim3の開発環境の構築については、slim3のマニュアルサイトを参照してください。

scenic3の設定

scenic3は1つのjar で提供されています。プロジェクトサイトからjarファイルをダウンロードし、 WEB-INF/lib の下にコピーします。

classpathの設定

プロジェクトのプロパティを開き、Build path から scenic3-x.x.x.jar をクラスパスに追加してください。

APTの設定

プロジェクトのプロパティを開き、Java Compiler -> Annotation Processing -> Factory path に scenic3-x.x.x.jar を追加します。
さらに Annotation Processing の Processor options に slim3.rootPackage という key を追加してください。value にはslim3で指定しているルートパッケージを指定します。

web.xmlの設定

通常のslim3のweb.xmlの設定から1カ所だけ変更する箇所があります。

<filter>
  <filter-name>FrontController</filter-name>
  <filter-class>org.slim3.controller.ScenicFrontController</filter-class>
</filter>
FrontControllerの設定を、org.slim3.controller.ScenicFrontController へ変更します。

Pageクラスの作成
ここで設定するアクションの仕様は以下の通りです。
  • /twitter/tweet でつぶやく
  • /twitter/ でつぶやきの一覧を表示する
任意のパッケージ(推奨は rootPackege.page) を作成し、Pageクラスを作成します。Pageクラスはscenic3.ScenicPageクラスを継承し、 scenic3.ScenicPage アノテーションを付与します。ここではootPackageは scenic3sampleとし、 slim3 のチュートリアルと同様にTwitterPageを作成します。

package scenic3sample.page;


import scenic3.ScenicPage;
import scenic3.annotation.Page;


@Page("/twitter")
public class TwitterPage extends ScenicPage {
  private TwitterService service = new TwitterService();
}
Pageアノテーションには、Pageクラスが実行されるURLのベースを指定します。

アクションメソッドの作成

scenic3ではアクションコントローラの代わりにアクションメソッドを定義します。scenic3.annotation.ActionPathアノテーションを付与します。
  @ActionPath("tweet")
  public Navigation tweet() {
    service.tweet(new RequestMap(request));
    return redirect(basePath); 
  }
アクションメソッドは、org.slim3.controller.Navigation を戻り値型とする、 scenic3.annotation.ActionPathアノテーションを付与したpublic メソッドです。
メソッドの実装は、slim3とほぼ同じように記述することができます。

デフォルトアクションメソッドの作成

ActionPathアノテーションを付与したアクションメソッドのいずれのパスにもマッチしなかった場合、デフォルトアクションメソッドが実行されます。デフォルトアクションメソッドは scenic3.annotation.ActionPathアノテーションの代わりにscenic3.annotation.Defaultアノテーションを付与します。

  @Default
     public Navigation index() {
     List<Tweet> tweetList = service.getTweetList();
     requestScope("tweetList", tweetList);
     return forward("/twitter/index.jsp");
  }

ControllerクラスとPageMacherクラスの自動生成

Pageクラスは保存されると、Annotation Processing により自動的に解釈され、ControllerクラスとPageMacherクラスが生成されます。
上記例であれば、scenic3sample.controller.$twitter._tweetクラスとscenic3sample.controller.$twitter.$indexクラスが生成されます。これらのクラスはslim3のコントローラクラスで、内部的にPageクラスのアクションメソッドを実行しているクラスです。また、scenic3sample.controller.matcher.TwitterPageMatcherが生成されます。
 Package Class ActionMethod
 scenic3sample.controller$index TwitterPage#index
 scenic3sample.controller $twitter._tweet  TwitterPage#tweet 
 scenic3sample.controller.matcher TwitterPageMatcher  - 

AppUrlsの作成

最後にslim3のrootPackege.controller に AppUrls クラスを生成します。
このクラスは静的なURLの定義とアプリケーションで使用するPageクラスの定義を行うクラスで、slim3のAppRpouterクラスに相当します。
以下にAppUrlのサンプルを示します。
package scenic3sample.controller;

import scenic3.UrlsImpl;
import scenic3sample.controller.matcher.TwitterPageMatcher;

public class AppUrls extends UrlsImpl {

    public AppUrls() {
        excludes("/css/*");
        add(TwitterPageMatcher.get());
    }
    
}
AppUrlsはscenic3.UrlsImplのサブクラスとし、名前は「AppUrls」としてください。
コンストラクタで静的ファイルとして除外するパス(正規表現)と、使用するPageクラスに対応するMacherを追加します。Macherはgetメソッドでオブジェクトを指定してください。

以上。
Comments