我需要验证几个 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
}
}
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
(我想不出一个简单的方法来保持它没有重复。)
使用 ListView 的事实似乎也使从validate()
方法中的表单对象中查找字段变得有些复杂。我想我需要获取 ListViewform.get("shares")
并遍历其子项?
访问中继器所包含的任意数量的字段的“正确方法”是ListView
什么?