プログラムで列を取得する DefaultDataTable があります。
マークアップは単純です。
<table wicket:id="dataTable" border="0" cellpadding="1" cellspacing="1" width="90%" />
すべての列は、渡されたラベルと属性の LinkedHashMap から動的に生成されます。
for (Entry<String, String> entry : entrySet) {
final String label = entry.getKey();
final String attribute = entry.getValue();
columns.add(new PsPropertyColumn(label, attribute) {
@Override
public void populateItem(Item cellItem, String componentId, IModel model)
{
final Object modelObject = model.getObject();
final Object value = PropertyResolver.getValue(attribute, modelObject);
// Add an edit link
BookmarkablePageLink link = new ...;
...
cellItem.add(link);
}
}
}
DefaultDataTable table = new DefaultDataTable("dataTable", columns, dataProvider, MAX_ROWS) {
...
}
add(table);
多くの投稿で言及されているように、これはアンカー (<a href="..." />) タグではなく onclick ハンドラーを持つセルとしてレンダリングされます。いくつかの理由でアンカー タグが必要です。1 つは、既存の onclick ハンドラーを邪魔することなく、独自の onclick ハンドラーを追加することです。
HTMLマークアップのパネル内にアンカータグを配置し、パネルサブクラス内にリンクを追加するという一般的に受け入れられているソリューションを見てきました。ただし、それは (テーブル内の) HTML マークアップ全体を提供するわけではなく、列 () タグはこのマークアップの一部である必要があると思います。これは、列を動的に生成するという私の戦略ではうまくいかないと思います (何人が求められるかさえ知りませんし、気にもしません)。マークアップでいくつあるかを指定せずに、動的に生成された列をアンカー タグとしてレンダリングする方法はありますか?
助けてくれてありがとう。