Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个复选框过滤GWT手机列表的好方法是什么?_Gwt_Filter_Celllist - Fatal编程技术网

使用多个复选框过滤GWT手机列表的好方法是什么?

使用多个复选框过滤GWT手机列表的好方法是什么?,gwt,filter,celllist,Gwt,Filter,Celllist,在GoogleWebToolkit(GWT)中工作时,我使用一个单元格列表来呈现关税列表的详细信息(使用CompositeCell在我自己的自定义单元格旁边显示一个复选框单元格) 我想按关税长度(12、18、24、36个月等)过滤列表。我希望在列表顶部为每个关税长度显示一个复选框,并在用户取消选中并重新选中复选框时根据需要更新数据提供者 我不知道预先设置的关税长度,他们将从结果集提取时,页面呈现。可能只有两个(需要两个复选框),但可能有10个(需要10个复选框)-我只想根据需要为每个复选框呈现一

在GoogleWebToolkit(GWT)中工作时,我使用一个单元格列表来呈现关税列表的详细信息(使用CompositeCell在我自己的自定义单元格旁边显示一个复选框单元格)

我想按关税长度(12、18、24、36个月等)过滤列表。我希望在列表顶部为每个关税长度显示一个复选框,并在用户取消选中并重新选中复选框时根据需要更新数据提供者

我不知道预先设置的关税长度,他们将从结果集提取时,页面呈现。可能只有两个(需要两个复选框),但可能有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);
    }
//用于放置箱子的面板
private Panel contractLengthPanel=新水平面板();
textPanel2.添加(contractLengthPanel);
//通过循环结果集,创建一组术语
Set contractTerms=new HashSet();
用于(电价:电价)
{
contractTerms.add(Integer.toString(primary.getContractLength());
}
//循环设置,为每个值创建一个复选框
for(字符串术语:contractTerms)
{
复选框=新复选框(期限+月份);
//设置具有相同名称和唯一id的所有框
setAttribute(“名称”、“术语框”);
box.getElement().setAttribute(“id”、“termBox”+术语);
合同长度面板。添加(框);
}
现在我不确定我的思路是否正确,但现在我将每个框作为同一组的一部分(它们具有相同的名称),我希望使用它添加一个处理程序,当选中或取消选中某个框时,该处理程序将被调用,并将框id(包含关税长度)传递给该函数


我希望这不是写得太混乱。感谢您的帮助。

在HTML中没有什么比得上“一组复选框”,在GWT中也没有。虽然有一些“单选按钮组”,但这只是让它们的选中状态相互排斥,它不会改变您从代码处理它们的方式

您必须侦听每个复选框上的更改

不过,您可以对所有复选框使用相同的事件处理程序;比如:

ValueChangeHandler=newvaluechangehandler(){
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
复选框=(复选框)event.getSource();
字符串id=box.getFormValue();
选中布尔值=box.getValue();
…
}
};

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

HTML中没有什么比得上“一组复选框”,GWT中也没有。虽然有一些“单选按钮组”,但这只是让它们的选中状态相互排斥,它不会改变您从代码处理它们的方式

您必须侦听每个复选框上的更改

不过,您可以对所有复选框使用相同的事件处理程序;比如:

ValueChangeHandler=newvaluechangehandler(){
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
复选框=(复选框)event.getSource();
字符串id=box.getFormValue();
选中布尔值=box.getValue();
…
}
};

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

谢谢Thomas。setFormValue()正是我想要的。。。不要再摆弄setAttribute()了:)谢谢托马斯。setFormValue()正是我想要的。。。不再与setAttribute()混在一起:)
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();
      …
   }
};