[Wicket-ja-user 644] Re: Bodyタグのid属性の動的変更とFragmentのマークアップについて

Back to archive index

Daisuke Miyamoto dai.0****@gmail*****
2012年 3月 15日 (木) 09:00:42 JST


都元です。

お困りの例外に対応できるかどうか確認しておりませんが、TransparentWebMarkupContainerを利用してみるのは
いかがでしょうか。

通常、bodyタグにwicket:idを振り、それをWebMarkupContainerとした場合は、提示されたように、
本来WebPageに対してaddすべきコンポーネントはbodyにaddしていくことになると思います。

このWebMarkupContainerをTransparentWebMarkupContainerにした場合は、あたかもbodyには何の細工も
しなかったかのように、普通にWebPageに対して、body下のコンポーネントをaddできるようになります。
この場合、WebPage#addのオーバーライドは必要なくなると思いますので、トラブル解決の一助になるかもしれません。

--
dai.0****@gmail*****
http://jiemamy.org/
http://d.hatena.ne.jp/daisuke-m/
http://twitter.com/daisuke_m/



2012年3月14日16:56 曽我 裕士 <soga****@y-net*****>:
> 曽我と申します。
>
> 現在、wicket1.5.2で開発しております。
>
> htmlのbodyタグのid属性をサーバー側で動的に変更させたくて
>
> 共通WebPageクラス内で以下のようなコードで変更しています。
>
> public class CommonFramePage extends WebPage {
>
>        private static final long serialVersionUID = 1L;
>
>         /** bodyコンポーネント(id属性変更用) */
>        private WebMarkupContainer _body;
>
>        public CommonFramePage() {
>
>                String idType = "動的な値";
>
>                WebMarkupContainer body = new WebMarkupContainer("body");
>                body.setOutputMarkupId(true);
>                body.add(new AttributeModifier("id",idType));
>                add(body);
>                this._body = body;
>        }
>
>        @Override
>        public CommonNaviFramePage add(Component... childs){
>                for(Component c : childs)
>                {
>                        if(null == _body || c instanceof HtmlHeaderContainer){
>                                super.add(c);
>                        } else {
>                                _body.add(c);
>                        }
>                }
>                return this;
>        }
>
> }
>
> このとき、共通WebPageを継承した個別ページでFragmentを使用しているとRuntimeExeptionが発生し
> Last cause: No Markup found for Fragment fragmentPage in providing markup container
> というエラーになってしまいます。
>
> ちなみに個別ページのFragmentのソースは以下のようにしています。
>
> protected class setPage extends Fragment {
>        private static final long serialVersionUID = 1L;
>        public setPage(String id) {
>
>                super(id, "fragmentPage", RentalListPage.this);
>
>                WebMarkupContainer ulPage = new WebMarkupContainer("ulPage");
>
>                // 先頭ページリンク
>                Link<Void> linkStartPage = new Link<Void>("pageLinkStart"){
>                        private static final long serialVersionUID = 1L;
>
>                        @Override
>                        public void onClick() {
>                                // 先頭ページ表示
>                                setReplayPage(1,sort);
>                        }
>                };
>
>                ulPage.add(linkStartPage);
>                add(ulPage);
>        }
> }
>
> 同じことをPanelを使用してやってみまたところ、Panelの場合はエラーになりません。
> Fragmentの箇所をPanelに変更すれば、問題ないようなのですが、
> Fragmentではどうしてエラーになるのかわかりません。
>
> また、htmlのbodyタグを動的に変更する方法でもっとスマートな方法があればご教示ください。
>
> _______________________________________________
> Wicket-ja-user mailing list
> Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user



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