Java Wicket:使用自定义内容动态填充单元格

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 ListView创建了一个表来创建列和行,代码如下所示:

<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){
}
});
}
});
}
});