如何在wicket框架中将图像列添加到表中?

Nou*_*aki 2 java wicket

我想在wicket框架中的表的每个单元格中添加一个包含图像的列.我在java类中创建表,并具有createColumns()方法,如下所示:

private List<IColumn> createColumns() {
    List<IColumn> columns = new ArrayList<IColumn>();
    // Create the columns that will be displayed, second param is the sort
    // order
    // Use column position for aggregate functions
    // Otherwise the query uses column aliases so these need to match here

    columns.add(new PropertyColumn(new Model("Status"), "code") {
        private static final long serialVersionUID = 1L;
        @Override
        public void populateItem(Item item, String componentId, IModel model) {
            Object[] values = ((ArrayWrapper) model.getObject()).getArray();
            setStatus((Integer) values[0]);
            item.add(new Image(componentId, new ResourceReference(this.getClass(), getStatus())));
        }
    });

    columns.add(new PropertyColumn(new Model("First"), "2", "array[1]"));
    columns.add(new PropertyColumn(new Model("Last"), "3", "array[2]"));        
    columns.add(new PropertyColumn(new Model("Sender"), "sender",
            "array[4]"));
    columns.add(new PropertyColumn(new Model("Receiver"), "receiver",
            "array[5]"));

    columns.add(new HeaderlessColumn() {
        private static final long serialVersionUID = 1L;

        public void populateItem(Item cellItem, String componentId,
                IModel rowModel) {
            cellItem.add(new ActionPanel(componentId, rowModel));
        };
    });

    return columns;
}
Run Code Online (Sandbox Code Playgroud)

html文件简单如下:

<html xmlns:wicket="http://wicket.sourceforge.net/">
<body>
<wicket:extend>
 <table align="center" wicket:id="results"></table>
</wicket:extend>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但我得到一个例外:

org.apache.wicket.markup.MarkupException:组件单元格必须应用于'img'类型的标签,而不是''(第0行,第0列)

它与我为图像制作列的线条有关.任何人都可以帮助我如何制作它?

Xav*_*ica 5

使用AbstractColumn而不是a PropertyColumn.PropertyColumn适用于只需要指定属性名称的情况,就像使用a一样PropertyModel.

从Wicket用户列表中的讨论中,DataTable输出此标记:

<tbody> 
  <tr wicket:id="rows"> 
    <td wicket:id="cells"> 
      <span wicket:id="cell">[cell]</span> 
    </td> 
  </tr> 
</tbody> 
Run Code Online (Sandbox Code Playgroud)

注意IColumn实现ICellPopulator,它ICellPopulator#populateItem()是覆盖的AbstractColumn.

所以,无论你提出什么,populateItem如果与<span>in标记相关联,都应该没问题.PropertyColumn可能是用Label做的,你可以添加一个自定义Panel或者WebMarkupContainer包含你的自定义Image.

这是一个稍微相关的问题:如何在Wicket中的PropertyColumn中创建链接?