2009年12月24日木曜日

T2で"/"でも"/index.html"の処理になるように(マルチデバイス対応)

スズキです。

下記のマルチデバイス対応したら、
http://blog.suz-lab.com/2009/12/multidevicefiltermobylet-t2-velocity-on.html
下記の"T2で"/"でも"/index.html"の処理"がおかしくなってしまいました。
http://blog.suz-lab.com/2009/12/t2indexhtml_21.html

page.mobile.IndexPage.java
page.other.IndexPage.java

を作成して、PCにて"/index.html"にアクセスすると、
本来なら、"page.other.IndexPage.java"呼ばれて欲しかったのですが、
"page.mobile.IndexPage.java"が呼ばれてしまいました。

なので、正常に動作するように修正です。

--------【AbstractIndexPage】--------
public abstract class AbstractIndexPage extends AbstractPage {
  @Override
  @Default
  public Navigation others(Request request) {
    String path = request.getRequestURI();
    if(path.endsWith("/")) {
      this.setAttributes(request);
      return Forward.to(path + "index.html");
    } else if(path.endsWith("/index.html")) {
      this.setAttributes(request);
      return Forward.to(path);
    } else {
      return Forward.to(path);
    }
  }
}
--------

-------【mobile.IndexPage】-------
@Page("/mobile")
public class IndexPage extends AbstractIndexPage {
  @Override
  protected void setAttributes(Request request) {
    ...
  }
}
--------

-------【other.IndexPage】-------
@Page("/other")
public class IndexPage extends AbstractIndexPage {
  @Override
  protected void setAttributes(Request request) {
    ...
  }
}
--------

要は、親の抽象クラスに@Page("/")と入れていたアノテーションを、
子供に@Page("/other")と入れた感じです。

だんだん、場当たりになってきた…

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

0 コメント: