曽我 裕士
soga****@y-net*****
2012年 3月 14日 (水) 16:56:46 JST
曽我と申します。 現在、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タグを動的に変更する方法でもっとスマートな方法があればご教示ください。