2011-07-20 6 views
3

WicketがサブセットのURLに対して私のPageインスタンスをインスタンス化する方法を変更したいと思います。通常、クラスをURLにマップしてmount()とします。この場合、Wicketはそのクラスの利用可能なコンストラクタの1つを選択してインスタンス化します。(どのように)Wicketでページを設定するカスタムクラスを提供できますか?

私のアプリケーションの一部は、異なるエンティティタイプ間で共通している単純なCRUD操作です。私はいくつかの工場とヘルパークラスに共通点を因数分解していると、今、私はこのようになります私のページのクラス階層が残っている:私は最後の二つのレベルをカットしたい

 
          TemplatePage 
           | 
         AbstractEntityPage 
       |         | 
     AbstractVenuePage     AbstractEventPage 
     |    |    |    | 
ViewVenuePage EditVenuePage ViewEventPage EditEventPage 

、なぜならより多くのエンティティタイプが追加され、それらのクラスに残っているコードはほとんどなく、より一般的なオブジェクトに簡単に取り入れることができるため、階層が広がり始めます。

AbstractEntityPageをクラスEntityPageに変換するのは簡単ですが、必要に応じて特定のコンポーネントを適切な場所に接続します。私は通常これを行うためにBuilderを使用しますが、私はWicketにそれを使用するようにどのように伝えるのか分かりません。私はAPIのドキュメントでそれについてのフックを見つけることができませんでした。

+0

処理する必要があるページの種類は何ですか。エンティティのエディタ/ビューアは明白ですが、他に何かありますか? – ireddick

+0

@ireddick - 作成、更新、削除もありますが、これらはページをレンダリングせずに何らかのアクションを実行してリダイレクトするため、別のセットです。ただし、後でビューとバリエーションが異なる場合があります。 –

答えて

1

デフォルトのIPageFactoryをorg.apache.wicket.settings.ISessionSettings.setPageFactory(IPageFactory)に置き換えることができ、特別な場合はページをインスタンス化する別の戦略を使用できます。

+0

私はアプリケーションクラスの 'init()'メソッドでそれを行うでしょうか? –

+0

はい、他の設定と同じです。 –

1

EntityPageを使用してパネル内の相違点を実装することはできますが、多くの類似したパネル(または実際に違いがない場合はいくつかの汎用パネル)が必要になります。または、wicketopiaのようなwicketのラピッドプロトタイピングライブラリの1つを見ることができます。私はそれらのどれも(私が見つけてテストしたもの)は生産準備ができているとは思っていませんが、彼らは考えのために救済することができますg

+0

問題の具体的なことを知らずに、私はパネルにも行きます。 – biziclop

関連する問題