[Wicket-ja-user 556] 匿名クラスをネストするとWicketNotSerializableExceptionが発生する

Back to archive index

maga****@hagan***** maga****@hagan*****
2011年 8月 10日 (水) 23:48:13 JST


お世話になっています。船田です。

Applicationクラスで,
addComponentInitializationListenerの引数で
匿名クラスを持たせた匿名クラスのリスナを使用しました。

addComponentInitializationListener(new IComponentInitializationListener() {
    @Override
    public void onInitialize(Component component) {
        component.add(new AbstractAjaxBehavior() {
            @Override
            public void onRequest() {
                // 
            }
        });
    }
});

ページをシリアライズするタイミングで
匿名クラスであるAbstractAjaxBehaviorをシリアライズしようとしますが、
ネスト元であるIComponentInitializationListenerがSerializableでもIClusterableでもないため
SerializableCheckerに引っかかります。

org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException: Unable to serialize class: com.mycompany.wickettest.MyApplication$1


この場合

public interface MyComponentInitializationListener extends IComponentInitializationListener, Serializable
public class MyAjaxBehavior extends AbstractAjaxBehavior

という具合にどちらかを匿名クラスにしないで実装するべきなのでしょうか?


IComponentInitializationListener
のほかに
IComponentInstantiationListener
IComponentOnAfterRenderListener
IComponentOnBeforeRenderListener

も同じようにWicketNotSerializableExceptionが投げられます。

多少、使い方が違うとはいえ IHeaderContributorには IClusterableがついているので
ListenerクラスにもIClusterableがつくべきなのでは、と思ってます。




Wicket-ja-user メーリングリストの案内
Back to archive index