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

Back to archive index

曽我 裕士 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
> 




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