使用多个CheckBox过滤GWT CellList的好方法是什么?

时间:2013-01-30 16:20:09

标签: gwt filter celllist

使用Google Web Toolkit(GWT)我使用CellList渲染关税列表的详细信息(使用CompositeCell在我自己的自定义单元格旁边显示CheckBoxCell)。

我想按关税长度(12,18,24,36个月等)过滤清单。我想在列表顶部为每个关税长度呈现一个复选框,并在用户取消选中并重新检查一个框时根据需要更新dataProvider。

我事先并不知道关税长度的集合,它们将在呈现页面时从结果集中提取。可能只有两个(需要两个复选框),但可能有10个(需要10个复选框) - 我只想根据需要为每个复选框呈现一个复选框。

所以不知何故,我需要将一个int值与每个复选框关联,然后将该int传递给一个函数,该函数通过删除所有匹配的关税来更新列表。我只是不确定如何为复选框添加处理程序以及如何获取该特定框的值。

这就是我的想法:

    // panel to hold boxes
    private Panel contractLengthPanel = new HorizontalPanel();      
    textPanel2.add(contractLengthPanel);

    // create a set of the terms, by looping the result set
    Set<String> contractTerms = new HashSet<String>();
    for(ElecTariff tariff : tariffs)
    {
        contractTerms.add(Integer.toString(tariff.getContractLength()));
    }

    // loop that set, creating a CheckBox for each value
    for(String term : contractTerms)
    {
        CheckBox box = new CheckBox(term + " Months");

        // set all boxes with the same name, and a unique id
        box.getElement().setAttribute("name", "termBoxes");
        box.getElement().setAttribute("id", "termBox" + term);

        contractLengthPanel.add(box);
    }

现在我不确定我是否在这里的右边,但是现在我将每个盒子作为同一组的一部分(它们具有相同的名称)我想用它来添加一个处理程序在选中或取消选中某个方框时调用,将方框ID(包含关税长度)传递给该函数。

我希望这不是太容易混淆。帮助赞赏。

1 个答案:

答案 0 :(得分:3)

在HTML中确实没有像“一组复选框”那样的东西,GWT中也没有。虽然有“radiobuttons组”,但它只是将它们的检查状态互斥,它不会改变你从代码中使用它们的方式。

您必须收听每个复选框的更改。

您可以做的是为所有复选框使用相同的事件处理程序;就像是:

ValueChangeHandler<Boolean> handler = new ValueChangeHandler<Boolean>() {
   @Override
   public void onValueChange(ValueChangeEvent<Boolean> event) {
      CheckBox box = (CheckBox) event.getSource();
      String id = box.getFormValue();
      boolean checked = box.getValue();
      …
   }
};

(注意:我使用getFormValue()而不是getElement().getId();我认为这是一个更好的选择:它专门用于将值与复选框相关联)