添加select / deselect all复选框到wicket DataTable

时间:2013-07-10 14:41:09

标签: jquery checkbox datatable wicket wicket-1.6

我是wicket的新手,我根本不懂jQuery。我使用wicket 6.9.0。我需要在wicket DataTable中添加select / deselect all复选框。我已阅读并实现了“Apache Wicket Cookbook”中的示例,您可以在第28页上看到Apache Wicket Cookbook. Chapter 5 但是取消选择一切都行不通。我在这里也读到了建议:http://evanchooly.com/logs/%23%23wicket/2011-08-31

问题是 - 我不知道如何通过Check * Selector或以某种方式实现它。有谁可以用简单有用的例子来帮助我?

**更新:**

@svenmeier在评论中写道。我正在尝试添加checkgroupselector以选中所有复选框,我执行了以下操作:

Form form = new Form("form");

CheckGroup group = new CheckGroup("group");
   group.add(new CheckGroupSelector("groupselector"));
   DataTable sourceTable = new DataTable("mytable", getColumns(), getDataProvider(), 10);
   sourceTable.setOutputMarkupPlaceholderTag(true);
   group.add(sourceTable);
   add(form);
   form.add(group);


private List getColumns() {
        List<IColumn<MyItem, String>> ret = Lists.newArrayList();
        ret.add(new AbstractColumn<MyItem, String>(new Model<>("")) {
            @Override
            public void populateItem(Item<ICellPopulator<MyItem>> cellItem, String componentId, IModel<MyItem> rowModel) {
                CheckBoxPanel checkBoxPanel = new CheckBoxPanel(componentId);
                cellItem.add(checkBoxPanel);
            }
        });
...
}

<span wicket:id="group">
<input type="checkbox" wicket:id="groupselector">check/uncheck all</input>
<table wicket:id="mytable">[Lookup Results]</table>
</span>

要将CheckBox添加到DataTable,我必须使用Panel,所以我有以下内容:

public class CheckBoxPanel extends Panel {

    private CheckBox field;

    public CheckBoxPanel(String id, IModel<Boolean> model) {
        super(id);
        field = new CheckBox("checkBox", model);
        add(field);
    }

    public CheckBoxPanel(String id) {
        this(id, new Model<Boolean>());
    }

    public CheckBox getField() {
        return field;
    }
}

在CheckBoxPanel.html

<body>
    <wicket:panel xmlns:wicket="http://wicket.apache.org">
        <input type="checkbox" wicket:id="checkBox">
    </wicket:panel>
</body>

实际上它确实显示了checkgroup但在我的表下并且检查/取消检查它不会影响它下面的复选框。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

我已经从Apache Wicket Cookbook. Chapter 5(第118页)“添加选择/取消选择所有复选框”实现了相同的示例并遇到了同样的问题。 SelectAll有效,DeselectAll不会。这可以修复:

更改jQuery语句
private final String js="var val=$(this).attr('checked'); $('." + uuid + "').each(function() { $(this).attr('checked', val); });";

private final String js = "if($(this).attr('checked') == 'checked') {var val=true;} else {var val=false;}$('." + uuid + "').each(function() { $(this).attr('checked', val); });";

第一个语句中的问题是,如果取消选中该复选框,则val为'undefined'而非'false'。

答案 1 :(得分:0)

请参阅此处的示例用法:

http://www.wicket-library.com/wicket-examples/compref/wicket/bookmarkable/org.apache.wicket.examples.compref.CheckGroupPage

它使用ListView而不是DataTable for CheckGroupSelector这无所谓。