Wicket で、HTML タグBODY や、属性を任意に書き換える例をまとめておく。
タグBODYや属性の書き換え
public class SampePage extends WebPage{
public SampePage(){
final String linkbody = "リンクBody 書き換え";
add(new BookmarkablePageLink<Void>("menu",MenuPage.class){
@Override
protected void onComponentTagBody(MarkupStream mst,ComponentTag openTag){
replaceComponentTagBody(mst,openTag,linkbody);
}
});
final String linkbody2 = "WebMarkupContainer でリンクBody 書き換え";
WebMarkupContainer link = new WebMarkupContainer("menu2"){
@Override
protected void onComponentTagBody(MarkupStream mst,ComponentTag openTag){
replaceComponentTagBody(mst,openTag,linkbody2);
}
};
link.add(new SimpleAttributeModifier("href"
,"?wicket:bookmarkablePage=:"+MenuPage.class.getName()));
add(link);
Image image = new Image("cat"
,new ResourceReference(SampePage.class,"cat.jpg"));
image.add(
new SimpleAttributeModifier("width","20")
,new SimpleAttributeModifier("height","15")
);
add(image);
}
}
タグ名を書き換えるなら、ComponentTag.setName
WebMarkupContainer span = new WebMarkupContainer("span"){
@Override
protected void onComponentTag(ComponentTag tag){
tag.setName("div");
}
};
add(span);
form の action を書き換え tag.put を使用
// tag.getAttributes().getString(String) で 元の属性取得
Form<Void> form1 = new Form<Void>("form1"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.put("action",tag.getAttributes().getString("action")+"&guid=ON");
}
};
add(form1);
// ?wicket:bookmarkablePage=: で、
Form<Void> form2 = new Form<Void>("form2"){
@Override
protected void onComponentTag(ComponentTag tag){
super.onComponentTag(tag);
tag.put("action","?wicket:bookmarkablePage=:"+SamplePage.class.getName());
}
};
add(form2);
タグを書きたくない時!
コンポーネントに対して、setRenderBodyOnly(true)を実行する。
例えば、
<span wicket:id="label"></span>
の時、、、
add(new Label("label","これはタグを書かない").setRenderBodyOnly(true));
で、上の span タグは出力されない