古川 烈
r_f_315****@hotma*****
2010年 9月 3日 (金) 17:49:46 JST
古川です。 早速の返答ありがとうございます。 Panel内部にrenderHead()をオーバーライドAbstractBehaviorを用意して、 renderHead()内でログを出力を設定してみたりしていたのですが、 メソッド自体が全く呼ばれている気配がありませんでしたので、 もしかしたらそうかと思っていたのですが・・・ 後学のために竹内様にご教示頂いたコード周辺を読んでみます。 ありがとうございました。 > Date: Fri, 3 Sep 2010 00:09:10 +0900 > From: webma****@chime***** > To: wicke****@lists***** > Subject: [Wicket-ja-user 472] Re: IComponentResolver利用時にPanelクラスで書かれたCSSPackageResource.getHeaderContributionが効かない > > 竹内です。 > > IComponentResolver.resolve()は、HTMLのマークアップをはじめから順番に > 処理し出力していく中で、idに対応するコンポーネントが見つからなかった > ときに初めて呼ばれます。 > > そのため、残念ながらresolve()が呼ばれる時には通り過ぎてしまっている > <head>タグに後から内容を追加することは原理的にできないはずです。 > > MarkupContainer.renderNext()の途中でIComponentResolverによる > 実際の解決がされているのでソースコードを少し眺めてみると > よいかもしれません。 > > -- > たけうち(chimerast) > > (2010/09/02 16:58), 古川 烈 wrote: > > 古川です。 > > > > 現在、IComponentResolverを利用したプログラムで、 > > <head></head> 区画にCSSが出力され無い問題で悩んでおります。 > > > > IComponentResolverを実装し、 > > Pageクラス内部でPanelコンポーネントがadd()されなかった場合は、 > > 自動でadd()するようなプログラムを作成しています。 > > > > ページHTML内部で下記の様なタグを用意しています。 > > ※タグの例 <div wicket:id="id01" panel-class="panel.MyPanel" ></div> > > 独自属性の panel-class からクラス名を取得してリフレクションでインスタン > > スを生成しています。 > > > > ------------------------------------------------------------------------------------------------------ > > public class MyComponentResolver implements IComponentResolver { > > > > @Override > > public boolean resolve(MarkupContainer container, MarkupStream > > markupStream, ComponentTag tag) { > > > > /* Wicketが自動的に追加するタグは無視 */ > > if (tag.isAutoComponentTag()) { > > return false; > > } > > > > try { > > > > /* コンポーネントクラスを取得 */ > > Class<WebComponent> targetClass = (Class<WebComponent>) > > Class.forName(tag.getAttribute("panel-class")); > > > > /* コンストラクタ( String id )の取得 */ > > Constructor<WebComponent> constructor = > > targetClass.getConstructor(String.class); > > > > /* パネルコンポーネントインスタンスを取得*/ > > Component component = constructor.newInstance(tag.getId()); > > > > /* コンポーネントを追加する */ > > return container.autoAdd(component, markupStream); > > > > } catch (Exception e) { > > } > > } > > } > > > > ------------------------------------------------------------------------------------------------------ > > public class MyPanel extends Panel { > > > > /** > > * > > * @param id > > * @param attributes > > */ > > public MyPanel(String id) { > > super(id); > > } > > > > @Override > > protected void onInitialize() { > > super.onInitialize(); > > add(CSSPackageResource.getHeaderContribution(MyPanel.class, > > "css/MyCss.css")); > > } > > } > > ------------------------------------------------------------------------------------------------------ > > > > このとき、Panelは正常にadd()され、レスポンスのHTMLソースにも出力されるの > > ですが、 > > <head></head> 区画に出力されるはずの > > > > <link rel="stylesheet" type="text/css" > > href="resources/panel.MyPanel/css/MyCss.css" /> > > > > が出力されません。 > > > > Pageクラス内の初期化時に、自分で add( new MyPanel("id01") ) した場合は問 > > 題無く出力されます。 > > IComponentResolverで解決しようとした場合、 > > どのようにすれば<head></head>区画に期待通りのソースを出力することが出来 > > るのか、 > > ご存知の方が居られましたら、ご教示お願い致します。 > > > > > > --------------------------------------------------- > > 古川 烈 > > 電子メール:r_f_315****@hotma***** > > --------------------------------------------------- > > > > > > > > _______________________________________________ > > Wicket-ja-user mailing list > > Wicke****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user -------------- next part -------------- HTMLの添付ファイルを保管しました... 下載