Wicket1.5をいろいろ見てみる - その4 RequestCycleの生成

 前回RequestCycleに関してちょこっとエントリーを書きましたが、そもそもRequestCycleの生成方法が1.5から変わっているのでそこらへんについて書いていこうと思います。

 1.4までは独自にRequestCycleを拡張して使用したい場合は下記のようにWebApplicationのnewRequestCycleをオーバーライドすることになっていました。

public class MyWebApplication extends WebApplication{
    //いろいろ省略

    @Override
    public RequestCycle newRequestCycle(final Request request, final Response response){
        //独自のRequestCycleを返す。
        return new MyWebRequestCycle(this, (WebRequest)request, (WebResponse)response);
    }
}

 1.5からは上記のnewRequestCycleメソッドが無くなり、代わりにcreateRequestCycleというメソッドが出来ているのですが、こちらのメソッドはfinalになっています。
また、RequestCycle自体はIRequestCycleProvider経由で取得するようになっているため独自のRequestCycleを使用する場合はgetRequestCycleProviderをオーバーライドし、独自のIRequestCycleProviderを返すようにします。

public class MyWebApplication extends WebApplication{
    public IRequestCycleProvider getRequestCycleProvider(){
        //getメソッドだけなので無名クラスで定義
        return new IRequestCycleProvider(){
            public RequestCycle get(final RequestCycleContext context){
                return new MyRequestCycle(context);
            }
        };
    }
}

特殊な事をやろうとする以外はそうそう独自のRequestCycleを使用することは無いかとは思いますが、上記のようにProviderを経由することで独自のRequestCylceを返すことが出来るようになります。