shinya okino
shiny****@gmail*****
2008年 8月 6日 (水) 13:15:33 JST
沖野です。 DataTableはコンストラクタに渡すIColumnの配列数が、列の数になります。 そこを変えればプログラム側で列の数を変えられます。 そして、IColumnのpopulateItemメソッドで、1レコードの出力内容が制御できます。実際にはPropertyColumnやAbstractColumnを使うと思います。 元のテーブルを実装するとこのような感じになります。 public class ProductPage extends WebPage { /** * 製品クラス */ private static class Product implements Serializable { /** 名前 */ private String name; /** 特長 */ private List<String> featrueList; public Product(String name, String feature1, String feature2) { this.name = name; this.featrueList = new ArrayList<String>(); featrueList.add(feature1); featrueList.add(feature2); } public String getName() { return name; } public List<String> getFeatrueList() { return featrueList; } } /** 製品リスト */ public static final List<Product> PRODUCT_LIST = new ArrayList<Product>() { { add(new Product("商品 1", "AAA", "あああ")); add(new Product("商品 2", "BBB", "いいい")); } }; public ProductPage() { List<IColumn> columns = new ArrayList<IColumn>(); columns.add(new PropertyColumn(new Model("商品名"), "name")); //特長分の列を追加 for (int i = 0; i < 2; i++) { final int index = i; columns.add(new AbstractColumn(new Model("特長"+ Integer.toString(i + 1))){ @Override public void populateItem(Item cellItem, String componentId, IModel rowModel) { Product product = (Product) rowModel.getObject(); cellItem.add(new Label(componentId, product.getFeatrueList().get(index))); } }); } SortableDataProvider provider = new SortableDataProvider() { @Override public Iterator iterator(int first, int count) { return PRODUCT_LIST.iterator(); } @Override public IModel model(Object object) { return new Model((Serializable) object); } @Override public int size() { return PRODUCT_LIST.size(); } }; DataTable dataTable = new DataTable("table", (IColumn[]) columns .toArray(new IColumn[columns.size()]), provider, PRODUCT_LIST.size()); dataTable.addTopToolbar(new HeadersToolbar(dataTable, provider)); add(dataTable); } } htmlはこれだけです。 <body> <table wicket:id="table"> </table> </body> これでヘッダ行も含めて ━━━━━━━━━━ 商品名┃特長1┃特長2 ━━━━━━━━━━ 商品 1┃ AAA ┃あああ. ━━━━━━━━━━ 商品 2┃ BBB ┃ いいい ━━━━━━━━━━ が出力されます。 もっと複雑な行単位で列の数が可変でcolspanで結合するようなテーブルは扱えないですが、普通の用途には充分だと思います。 -- 沖野信也 shiny****@gmail*****