1

Google Web Toolkit(GWT)での作業私はCellListを使用して、料金表のリストの詳細をレンダリングしています(CompositeCellを使用して、自分のカスタムセルの横にCheckBoxCellを表示しています)。

関税の長さ(12、18、24、36か月など)でリストをフィルタリングしたい。リストの一番上に各料金の長さのチェックボックスを表示し、ユーザーがチェックボックスをオフにしてから再度チェックしたときに、必要に応じてdataProviderを更新したいと思います。

料金の長さのセットは事前にはわかりません。ページがレンダリングされるときに結果セットから抽出されます。2つ(2つのチェックボックスが必要)だけである可能性がありますが、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(料金表の長さを含む)をその関数に渡します。

これがあまり混乱して書かれていないことを願っています。感謝します。

4

1 に答える 1

4

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()しました;より良い選択だと思います:値をチェックボックスに関連付けるために特別に作成されています)

于 2013-01-30T16:36:51.900 に答える