wicketで詰まった箇所:「ListView」と「ExternalLink」

wicketで非常に躓いた部分があったのでメモ。

wicketでは、tableのtr要素などの繰り返し要素を生成するために「Listview」という便利なコンポーネントが用意されています。

便利なのですが、個人的にはこれを導入するのが非常にやっかいでした。

繰り返す中でgetModelObjectを用いてリストのオブジェクトを生成するのですが、それをどう取ってやるのかがいまいちわからなくて詰まりました。

最初、

add(new ListView<TweetTable>("tweetlistview", tweets){
	@Override
	protected void populateItem(ListItem<TweetTable> item){
		final List<TweetTable> tweet = (List<TweetTable>)item.getModelObject();
		item.add(new Label("id", tweet.get(0).getId().toString()));
		item.add(new Label("tweet", tweet.get(0).getTweet()));
	}
});

としていたのですが(今考えるとなぜこうしていたのかも謎ですが)、これでは動かず、

add(new ListView<TweetTable>("tweetlistview", tweets){
	@Override
	protected void populateItem(ListItem<TweetTable> item){
		final TweetTable tweet = (TweetTable)item.getModelObject();
		item.add(new Label("id", tweet.getId().toString()));
		item.add(new Label("tweet", tweet.getTweet()));
	}
});

としてやることで動きました。
ん〜、ListViewに突っ込んだ型に合わせろってことなんでしょうかね。
理由はよく分かりません;


もう一つ躓いたもの。
wicketでは外部ページに遷移するリンクを生成するのにExternalLinkを用いるのですが、これの使い方を解説してるページが少なく、詰まりました。

<a>タグで挟む文字列が固定の時は

<a href="#" wicket:id="external">外部ページ</a>
add(new ExternalLink("external", "http://hoge.com");

なのですが、<a>タグで挟む文字列もwicketで生成したい場合は

<a href="#" wicket:id="external">外部ページ</a>
String externalPageName = "ほげぺーじ";
add(new ExternalLink("external", "http://hoge.com", externalPageName);

となります。
これが分からず、ずっと

<a href="#" wicket:id="external">
<span wicket:id="str">文字列</span>
</a>
String externalPageName = "ほげぺーじ";
add(new ExternalLink("external", "http://hoge.com");
add(new Label("string", externalPageName);

としてエラーを返されていました。

ドキュメントをきちんと読めばいいのでしょうがね^^;


とりあえず、自分用メモ的な感じで書いておきました。