shinya okino
shiny****@gmail*****
2008年 9月 3日 (水) 14:40:50 JST
沖野です。 動作を追ってみました。 <wicket:child><wicket:extend>はレンダリング時にマージするのではなく、 htmlファイルを読み込む時に継承クラス分も読み込んでマージしたものをキャッシュしているようです。(Markup・MergedMarkupクラス) PageやPanelはレンダリング時に自クラスに対応したMarkupを使っていますが、 Fragmentはコンストラクタで渡されたMarkupContainerクラスのMarkupを使います。 なので、例にあったDDDのhtmlは使われず、BBBのhtml内の<wicket:fragment>部分だけがレンダリングされるようになります。 Fragmentで継承を使うのはいろいろ手を入れないと難しそうです。 08/09/01 に 古川 烈<r_f_315****@hotma*****> さんは書きました: > > 古川です、 > Fragmentと継承の動作が良くわからないので質問です。 > > あるパネル(html)内で以下のように定義しました。 > > <wicket:panel> > <span wicket:id="data">あああ</span> > </wicket:panel> > <wicket:fragment wicket:id="fragment"> > <wicket:child /> > </wicket:fragment> > > > /** > * パネル > */ > public class BBB extends Panel implements Serializable { > > public BBB( String id ) { > super( id ); > this.add( new Label( "data", "ほげほげ" ) ); > } > > /** > * 親フラグメント > */ > public class CCC extends Fragment implements Serializable { > > public CCC( String id ) { > super( id, "fragment", BBB.this ); > } > } > } > > > (子フラグメントHTML) > <wicket:extend> > テスト文字列 > </wicket:extend> > > /** > * 子フラグメント > */ > public class DDD extends BBB.CCC implements Serializable { > > public DDD( BBB bbb, String id ) { > bbb.super( id ); > } > } > > としてページWebPage AAAの内部で > > BBB bbb = new BBB( "mypanel" ); > > this.add( bbb ); > this.add( new DDD( bbb, "mypanel2" ) ); > > としました。 > > すると、画面では > 「ほげほげ」だけ表示され、「テスト文字列」は表示されませんでした。 > DDDのコンストラクタ内部でSysoutしてみたらしっかりコンストラクタは走っていました。 > childの継承部分が完全に無視されているように思いました。 > > 「Fragment」を継承したクラスをさらに継承することはできないのでしょうか??? > どなたかお詳しい方ご教示していただけませんでしょうか? > > ________________________________ > Hotmailユーザ限定の格安ブロードバンドご存じですか? 月額1,480円から。 ずっと同じ安心料金、比べて分かるこの安さ > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > > -- 沖野信也 shiny****@gmail*****