我想在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;
}
html文件简单如下:
<html xmlns:wicket="http://wicket.sourceforge.net/">
<body>
<wicket:extend>
<table align="center" wicket:id="results"></table>
</wicket:extend>
</body>
</html>
但我得到一个例外:
org.apache.wicket.markup.MarkupException:组件单元格必须应用于'img'类型的标签,而不是''(第0行,第0列)
它与我为图像制作列的行有关。任何人都可以帮助我如何制作它吗?
答案 0 :(得分:5)
使用AbstractColumn
代替PropertyColumn
。 PropertyColumn
适用于您只需要指定属性名称,就像使用PropertyModel
一样。
从Wicket用户列表中的this discussion开始,DataTable
输出此标记:
<tbody>
<tr wicket:id="rows">
<td wicket:id="cells">
<span wicket:id="cell">[cell]</span>
</td>
</tr>
</tbody>
请注意,IColumn
实施ICellPopulator
,ICellPopulator#populateItem()
覆盖AbstractColumn
。
因此,如果与populateItem
中的<span>
相关联,那么PropertyColumn
中提出的任何内容都应该没问题。 Panel
可能正在使用Label执行此操作,您应该可以添加包含WebMarkupContainer
的自定义Image
或{{1}}。
这是一个稍微相关的问题:How do you make a link inside a PropertyColumn in Wicket?
答案 1 :(得分:1)
CreateColumns方法中的代码如下:
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 ImagePanel(componentId, new ResourceReference(SearchResults.class, getStatus())));
}
});
这是ImagePanel:
public class ImagePanel extends Panel {
private static final long serialVersionUID = 1L;
/**
* @param id
*/
public ImagePanel(String id, ResourceReference image) {
super(id);
add(new Image("status", image));
}
}
面板的html代码是:
<html xmlns:wicket="http://wicket.sourceforge.net/">
<body>
<wicket:panel>
<img wicket:id="status"/>
</wicket:panel>
</body>
</html>