Мне нужно проверить что-то о нескольких полях ввода Wicket типа TextField<BigDecimal>
(а именно, что сумма процентов равна 100). Есть одно-много таких полей ввода; Дело в том, что я не знаю заранее, сколько.Доступ к произвольному количеству полей в валидаторе формы
(упрощенный пример)
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
}
}
Java код ListView:
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 в коллекции на странице, но этот подход терпит неудачу, поскольку метод populateItem()
прилагаемого значения ListView
привел не только первую страницу, но и дубликаты полей добавляются в коллекцию. (Я не мог найти простой способ сохранить его без дубликатов).
Тот факт, что ListView также используется, как представляется, несколько усложняет поиск полей из объекта формы в методе validate()
. Я полагаю, мне нужно получить ListView с form.get("shares")
и повторить его дочерние элементы?
Что такое «правильный путь» для доступа к любому количеству полей, заключенных в ретранслятор, например ListView
?
калиткой 1,4 , если это имеет значение. – Jonik