我使用wicket ListViews创建了一个表来创建列和行,代码如下所示:
ErhebungMatrixPanel.java
public ErhebungMatrixPanel(String id) {
super(id);
this.add(matrixForm);
matrixForm.add(new ListView<Zustaendigkeit>("columns", zustaendigkeiten){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<Zustaendigkeit> item) {
final int index = item.getIndex();
item.add(new Label("zustLabel", zustaendigkeiten.get(index).getName().toString()));
}
});
matrixForm.add(rows = new ListView<Erhebung>("rows", erhebungen){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<Erhebung> item) {
final IModel<Boolean> checked = Model.of(Boolean.FALSE);
final int index = item.getIndex();
item.add(new Label("erhebungLabel", erhebungen.get(index).getName()));
item.add(new AjaxCheckBox("check", checked) {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
//TODO
}
});
}
});
}
在这个表中我想把AjaxCheckBox放到每个单元格中,创建类似授权矩阵的东西,现在问题是,因为List zustaendigkeiten 的长度最多可能会在一段时间内变大,我无法插入静态数量的CheckBoxes。现在,只有表格的一列被CheckBoxes覆盖。响应的.html文件如下所示:
<wicket:panel>
<form wicket:id="matrixForm">
<table class="matrix">
<thead>
<tr class="headers">
<th></th>
<span wicket:id="columns">
<th wicket:id="zustLabel"></th>
</span>
</tr>
</thead>
<tbody>
<tr wicket:id="rows">
<th wicket:id="erhebungLabel"></th>
<td><input wicket:id="check" type="checkbox" /></td>
</tr>
</tbody>
</table>
</form>
</wicket:panel>
这样的事情:
<tbody>
<tr wicket:id="rows">
<th wicket:id="erhebungLabel"></th>
<td><input wicket:id="check" type="checkbox" /></td>
<td><input wicket:id="check" type="checkbox" /></td>
<td><input wicket:id="check" type="checkbox" /></td>
</tr>
</tbody>
显然不会起作用,因为1.它应该是动态的,但我猜JS可以提供帮助,2。Wicket会抛出MarkUp错误。
我是否可以像使用DataTable一样使用newCellItem方法?
答案 0 :(得分:1)
这就是你需要的东西吗?
HTML:
<form>
<table>
<tr>
<th></th>
<th wicket:id="headerList"><span wicket:id="name"></span></th>
</tr>
<tr wicket:id="rowList">
<td wicket:id="name"></td>
<td wicket:id="cellList">
<input type="checkbox" wicket:id="checkbox"/>
</td>
</tr>
</table>
</form>
爪哇:
add(new ListView<User>("headerList", new PropertyModel<>(this, "users")) {
@Override
protected void populateItem(ListItem<User> listItem) {
listItem.add(new Label("name", new PropertyModel(listItem.getModelObject(), "name")));
}
});
add(new ListView<String>("rowList", new PropertyModel<>(this, "roles")) {
@Override
protected void populateItem(ListItem<String> listItem) {
final String role = listItem.getModelObject();
listItem.add(new Label("name", role));
listItem.add(new ListView<User>("cellList", new PropertyModel<>(TestPage.this, "users")) {
@Override
protected void populateItem(ListItem<User> listItem) {
final User user = listItem.getModelObject();
listItem.add(new AjaxCheckBox("checkbox", new IModel<Boolean>() {
@Override
public Boolean getObject() {
return user.getRoles().contains(role);
}
@Override
public void setObject(Boolean aBoolean) {
if (aBoolean) {
user.getRoles().add(role);
} else {
user.getRoles().remove(role);
}
}
@Override
public void detach() {
}
}) {
@Override
protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) {
}
});
}
});
}
});