Stripes Frameworkどうよ。その2 〜 かわいいURLあるよ。

JavaでURLをカスタマイズする場合、Url Rewrite Filter を使ったりすのですが、Stripesには、標準でその機能があります。しかーし、公式のサイトでもその詳細の説明が見つからない。。

まず、クラスと、URLのデフォルトの紐づけについて。

/hoge/Calc.action

というURLにアクセスすると

action.hoge.CalcActionBean

というクラスがコールされます。これは、名称の規約です。

で、URLのカスタマイズについて

package action;

import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.HandlesEvent;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.action.UrlBinding;

@UrlBinding("/calc/{$event}/{arg1}/{arg2}")
public class CalcActionBean implements ActionBean {

    private ActionBeanContext context;
    private Integer arg1;
    private Integer arg2;
    private Integer result;

    @HandlesEvent("add")
    public Resolution add() {
        result = arg1 + arg2;
        return new ForwardResolution("/calc.jsp");
    }

    @HandlesEvent("subtract")
    public Resolution subtaract() {
        result = arg1 - arg2;
        return new ForwardResolution("/calc.jsp");
    }

    // getter,setter 割愛
}

UrlBindingアノテーションを使って紐づけるURLを指定します。
{$event} の部分は、URLのパスでイベントを指定している感じです。実行したいメソッドに紐づけることができます。
{arg1}, {arg2} は、URLのパスをActionBeanのフィールドに紐づけています。

/calc/add/2/1

にアクセスすると、CalcActionBean#add メソッド実行され、2+1が計算されます。

で、後回しにしましたが、web.xmlにFilterの設定が必要です。

  <filter>
    <filter-name>DynamicMappingFilter</filter-name>
    <filter-class>net.sourceforge.stripes.controller.DynamicMappingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>DynamicMappingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

以上