在Google Web Toolkit(GWT)中工作 我正在使用CellList来呈现关税列表的详细信息(使用复合单元格在我自己的自定义单元格旁边显示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(包含关税长度)传递给该函数。
我希望这不会写得太混乱。感谢帮助。
HTML中确实没有像"一组复选框"这样的了,GWT中也没有。虽然有某种"单选按钮组",但这只是让它们的检查状态相互排斥,它不会改变您从代码中使用它们的方式。
您必须听取每个复选框上的更改。
不过,您可以做的是对所有复选框使用相同的事件处理程序;如下所示:
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()
;我相信这是一个更好的选择:它是专门为将值与复选框相关联而设计的)