[Wicket-ja-user 471] IComponentResolver利用時にPanelクラスで書かれたCSSPackageResource.getHeaderContributionが効かない

Back to archive index

古川 烈 r_f_315****@hotma*****
2010年 9月 2日 (木) 16:58:13 JST


古川です。

現在、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*****
---------------------------------------------------
 		 	   		  
-------------- next part --------------
HTMLの添付ファイルを保管しました...
다운로드 



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