タイプのいくつかの Wicket 入力フィールドについて何かを検証する必要がありますTextField<BigDecimal>
(つまり、パーセンテージの合計が 100 であること)。このような入力フィールドは 1 つから多数あります。つまり、事前に何人かわかりません。
(簡略化した例)
private class PercentageValidator extends AbstractFormValidator {
@Override
public FormComponent<?>[] getDependentFormComponents() {
// ...
}
@Override
public void validate(Form<?> form) {
List<TextField<BigDecimal>> fields = // TODO
// the actual validation where the value of every field is needed
}
}
ListView の Java コード:
ListView<?> listView = new ListView<PropertyShare>("shares", shares) {
@Override
protected void populateItem(ListItem<PropertyShare> item) {
// ...
item.add(new TextField<BigDecimal>("share", ... model ...));
}
};
HTML:
<tr wicket:id="shares">
<td> ... </td>
<td>
<input wicket:id="share" type="text" size="4"> %
</td>
</tr>
すべての TextField を Page のコレクションに保持しようとしましたが、このアプローチは失敗します。これは、Page が最初に作成されるだけでなくpopulateItem()
、囲みのメソッドListView
が呼び出されるため、重複するフィールドがコレクションに追加されるためです。(重複しないようにする簡単な方法がわかりませんでした。)
validate()
ListView が使用されているという事実も、メソッド内のフォーム オブジェクトからフィールドを見つけるのをやや複雑にしているようです。ListView を取得してform.get("shares")
、その子を反復処理する必要があると思いますか?
のようなリピーターで囲まれた任意の数のフィールドにアクセスする「正しい方法」は何ListView
ですか?