Model Code:
// can also return an Iterable, Collection, etc
public <TypeOfProperty>[] get<PropertyName>() { ... }

Default Table
<table>
Model Code:
// no static typing required in model, thus we can even have different panels in it as demonstrated below
// though you can also stick to the code above and use only one panel
public List<?> get<PropertyName>() { ... }
As Unordered List
    <!-- this just puts a panel for each
         element beneath one another -->
    <ul>
    As Collapsible
    // collapsibles are panels that can be opened/closed
    // all panels can be open at the same time
    new GeneratedBinding(this).addBindingInterceptor(new BindingInterceptor() {
        @Override
        public Component createTable(final TableHtmlElement e) {
            if (TablesAndPanelsConstants.asCollapsible.equals(e.getWicketId())) {
                return new ModelCollapsibleList(e);
            }
            return super.createTable(e);
        }
    }).bind();
    As Accordion
    // a special type of collapsibles where 
    // only one panel can be open at a time
    new GeneratedBinding(this).addBindingInterceptor(new BindingInterceptor() {
        @Override
        public Component createTable(final TableHtmlElement e) {
            if (TablesAndPanelsConstants.asAccordion.equals(e.getWicketId())) {
                return new ModelAccordion(e);
            }
            return super.createTable(e);
        }
    }).bind();
    As Tabbed
    // we can even turn it into a TabbedPanel easily
    new GeneratedBinding(this).addBindingInterceptor(new BindingInterceptor() {
        @Override
        public Component createTable(final TableHtmlElement e) {
            if (TablesAndPanelsConstants.asTabbed.equals(e.getWicketId())) {
                return new ModelTabbedPanel(e);
            }
            return super.createTable(e);
        }
    }).bind();