曽我 裕士
soga****@y-net*****
2012年 3月 19日 (月) 13:14:48 JST
曽我です。 結果的には解決しました。 もともと、RentalListPage.html内に<wicket:fragment>タグを定義していたのですが、 それではエラーになってしまい、CommonFramePage.html内に<wicket:fragment>を定義すると エラーもなく表示されました。 元々、CommonFramePage.html内のbodyタグのid属性の動的変更をする前は、RentalListPage.html内に <wicket:fragment>タグを定義して、RentalListPage.java内でaddするという形で問題なかったのですが、 今回、CommonFramePage.java内で、bodyタグへの処理を追加することで、RuntimeExceptionになっていました。 教科書的にはRentalListPage.html内にfragmentのタグを配置し、RentalListPage.java内でadd処理をするということで 問題ないと思ったのですが、bodyタグにwicket:idを振ったことで、何か影響があったのでしょうか。 (2012/03/16 0:05), Tsutomu Yano wrote: > 矢野です。 > > サブクラスでフラグメントを使ってるということは、CommonFramePageのサブクラス用のHTMLファイル内に、フラグメントが使うマークアップが<wicket:fragment>を使って定義されているはずですが、その部分はどういう定義になってますでしょうか? > > フラグメントのマークアップが見つからない、というエラーなので、HTMLファイルの延義の方が気になります。 > > 例示していただいたコードであれば、おそらく、RentalListPageというページ用HTMLファイル内に<wicket:fragment> タグがあり、そのidは "fragmentPage" であるはずです。 > > コードが断片的なのでよくわからないのですが、フラグメントの使い方が間違ってる可能性はないでしょうか? 他の場所ではフラグメントが使えているが、この部分だけが使えないのでしょうか? > > --------------------------------------------------- > 矢野 勉(やの つとむ) > 電子メール: t_yano****@me***** > --------------------------------------------------- > > On 2012/03/14, at 16:56, 曽我 裕士 wrote: > >> 曽我と申します。 >> >> 現在、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 mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >