Wicket で BookmarkableLink、ExternalLink というものがありますが、
ExternalLinkは、コンストラクタで、以下のようにアンカーテキストを設定できます。
add(new ExternalLink("google", "https://www.google.co.jp", Google));
BookmarkableLink は、コンストラクタ経由では、アンカーテキストの設定ができず、
以下のような、HTMLを記述し、
<a href="https://www.google.co.jp" wicket:id="link"><wicket:container wicket:id="anchorText"/></a>
JAVA側で、BookmarkableLink に Label を add する 実装を行なっていました。
BookmarkableLink bookmarkableLink = new BookmarkableLink<Void>("link", HogePage.class);
bookmarkableLink.add(new Label("label", Model.of("Google"));
add(bookmarkableLink);
しかし、そんなことはする必要はなく、AbstractLink には、setBody
というメソッドがあり、
/**
* Sets the link's body model
*
* @param bodyModel
* @return <code>this</code> for method chaining
*/
public AbstractLink setBody(final IModel<?> bodyModel)
{
this.bodyModel = wrap(bodyModel);
return this;
}
このメソッドを使用すると、下記のように記述できます。
BookmarkablePageLink bookmarkablePageLink = new BookmarkablePageLink<Void>("link", HogePage.class);
bookmarkablePageLink.setBody(Model.of("Google"));
add(bookmarkablePageLink)
ExternalLink リンクのコンストラクタ内でも、setBody
をCall しており、
AbstractLink#onComponentTagBody()
で getBody()
経由で設定値が使用されます。
public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
IModel<?> tmpBodyModel = this.getBody();
if(tmpBodyModel != null && tmpBodyModel.getObject() != null) {
this.replaceComponentTagBody(markupStream, openTag, this.getDefaultModelObjectAsString(tmpBodyModel.getObject()));
} else {
super.onComponentTagBody(markupStream, openTag);
}
}
これで、HTML上 Wicket の マークアップは1つ減らせます。
css で styleを設定したいわけではなければ、これで問題なさそうに思います。
以上です。
コメント