Java Wicket:使用自定义内容动态填充单元格
我使用wicket ListView创建了一个表来创建列和行,代码如下所示:Java Wicket:使用自定义内容动态填充单元格,java,listview,html-table,wicket,markup,Java,Listview,Html Table,Wicket,Markup,我使用wicket ListView创建了一个表来创建列和行,代码如下所示: <wicket:panel> <form wicket:id="matrixForm"> <table class="matrix"> <thead> <tr class="headers"> <th></th>
<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>
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
}
});
}
});
}
public-ErhebungMatrixPanel(字符串id){
超级(id);
添加(矩阵变换);
添加(新列表视图(“列”,zustaendigkeiten){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void populateItem(列表项){
final int index=item.getIndex();
添加(新标签(“zustLabel”,zustaendigkeiten.get(index.getName().toString()));
}
});
add(rows=新列表视图(“rows”,erhebungen){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void populateItem(列表项){
选中的最终IModel=Model.of(Boolean.FALSE);
final int index=item.getIndex();
添加(新标签(“erhebungLabel”,erhebungen.get(index.getName()));
添加(新的AjaxCheckBox(“选中”),选中){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
//待办事项
}
});
}
});
}
在这个表中,我想在每个单元格中放入一个AjaxCheckBox,创建一个类似于授权矩阵的东西现在的问题是,由于zustaendigkeiten列表的长度很可能会随着时间的推移而变大,所以我不能插入一个静态的复选框。目前,表中只有一列包含复选框。响应的.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>
大概是这样的:
<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会抛出一个标记错误
是否有任何类似newCellItem的方法可以像在DataTable中一样使用?您需要这样的方法吗 HTML:
爪哇:
add(新列表视图(“headerList”),新属性模型(此“用户”)){
@凌驾
受保护的void populateItem(ListItem ListItem){
添加(新标签(“名称”,新属性模型(listItem.getModelObject(),“名称”));
}
});
添加(新列表视图(“行列表”,新属性模型(“角色”)){
@凌驾
受保护的void populateItem(ListItem ListItem){
最终字符串角色=listItem.getModelObject();
添加(新标签(“名称”,角色));
添加(新的ListView(“cellList”,新的PropertyModel(TestPage.this,“users”)){
@凌驾
受保护的void populateItem(ListItem ListItem){
最终用户=listItem.getModelObject();
添加(新的AjaxCheckBox(“复选框”),新的IModel(){
@凌驾
公共布尔getObject(){
返回user.getRoles().contains(角色);
}
@凌驾
公共void setObject(布尔aBoolean){
if(阿布奥兰语){
user.getRoles().add(角色);
}否则{
user.getRoles().remove(角色);
}
}
@凌驾
公共图书馆{
}
}) {
@凌驾
受保护的void onUpdate(AjaxRequestTarget AjaxRequestTarget){
}
});
}
});
}
});