2009年12月18日金曜日

T2で"/"でも"/index.html"の処理になるように

スズキです。

いろいろやり方はあると思いますが、
とりあえず、下記のような感じで実現してみました。

まずはPageの抽象クラスです。
結局、"request.setAttriburte"なので、
それが目的の抽象メソッド作っときました。

--------【AbstractPage】--------
public abstract class AbstractPage {
  // "@Default"で実行される処理を想定
  public abstract Navigation others(Request request);
  // テンプレートに渡すオブジェクトをセット
  protected abstract void setAttributes(Request request);
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/suz/lab/gae/page/AbstractPage.java?r=34

TOPページ("/"と"/index.html"でアクセス)は下記のクラスを継承します。

--------【AbstractIndexPage】--------
@Page("/")
public abstract class AbstractIndexPage extends AbstractPage {
  // "/"か"index.html"の時は"/index.html"にフォワード
  @Override
  @Default
  public Navigation others(Request request) {
    String path = request.getRequestURI();
    if(path.equals("/") || path.equals("/index.html")) {
      this.setAttributes(request);
      return Forward.to("/index.html");
    } else {
      return Forward.to(request.getRequestURI());
    }
  }
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/suz/lab/gae/page/AbstractIndexPage.java?r=34

TOPページ以外は下記を継承です。

--------【AbstractDefaultPage】--------
public abstract class AbstractDefaultPage extends AbstractPage {
  @Override
  @Default
  public Navigation others(Request request) {
    this.setAttributes(request);
    return Forward.to(request.getRequestURI());
  }
}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-gae/src/suz/lab/gae/page/AbstractDefaultPage.java?r=34

で、実際の"index.html"のPageクラスは下記のように継承して作成します。

--------【IndexPage】--------
public class IndexPage extends AbstractIndexPage {
  @Override
  protected void setAttributes(Request request) {
    request.setAttribute("hoge", "hoge");
  }
}
--------

すると"/"と"/index.html"のどちらでアクセスしても、上記の"setAttributes"が実行され、
テンプレート(index.html)が表示します。

そろそろ、T2のプラグイン、やってみよう。

--------
http://www.suz-lab.com

4 コメント:

Shinpei Ohtani さんのコメント...

あれ?web.xmlのwelcomeファイルのリストに記載しておいて、/アクセスするではダメな感じですかね?

suz-lab さんのコメント...

たしか、welcomeファイルをindex.htmlにして、"/"にアクセスしても、
@Page("/index.html")をつけたPageクラスは呼ばれなかったので、こんなことをしています。

Shinpei Ohtani さんのコメント...

GAEだとWelcomeファイルが有効じゃないんですかねえ?ちょっとやってみます。

suz-lab さんのコメント...

Welcomeは有効なようなんですが、T2が"/"は"/"とのみしか認識してなくて、@Page("/index.html")に引っかからない感じだったと思います。(ちょっと記憶が薄くなってしまってますが...)