我有一個bean,我使用Model附加到表單上,它工作正常。另外我有一個豆類的領域,如Map<String, javax.mail.Address>
。考慮到每個地圖條目應該像Label: TextField
一樣,我怎樣才能將這個字段與表單模型綁定?Wicket表單中的多個TextField
在此先感謝。
我有一個bean,我使用Model附加到表單上,它工作正常。另外我有一個豆類的領域,如Map<String, javax.mail.Address>
。考慮到每個地圖條目應該像Label: TextField
一樣,我怎樣才能將這個字段與表單模型綁定?Wicket表單中的多個TextField
在此先感謝。
也許是這樣的:
ListView<String> textAreasListView = new ListView<String>("someid", bean.map.keySet()) {
@Override
protected void populateItem(final ListItem<String> itemLang) {
itemLang.add(new Label("label", itemLang.getModelObject()));
Model<String> textModel = new Model<String>() {
@Override
public String getObject() {
return bean.map.get(itemLang.getModelObject()).toString;
}
@Override
public void setObject(String object) {
bean.map.put(itemLang.getModelObject(), new Address(object));
}
};
itemLang.add(new TextField<String>("email", textModel));
}
};
,並添加到您的形式。
地址爲&的自定義轉換器字符串將是一個額外的改進。
我想,你可以以這樣的方式將其綁定:
TextField<Address> textField = new TextField<Address>("address",
beanModel.<Address> bind("addressMap[addressKey]"), Address.class) {
@SuppressWarnings("unchecked")
@Override
public <C> IConverter<C> getConverter(Class<C> type) {
if (Address.class.isAssignableFrom(type)) {
return (IConverter<C>) new AddressConverter();
} else {
return super.getConverter(type);
}
}
};
form.add(textField);
這裏的「addressMap」是地圖領域,「addressKey」的名稱在地圖上的地址值的關鍵。
爲AddressConverter類上市:
public class AddressConverter implements IConverter<Address> {
public Address convertToObject(String string, Locale locale) {
try {
return new InternetAddress(string);
} catch (AddressException e) {
return null;
}
}
public String convertToString(Address address, Locale locale) {
return address.toString();
}
}
當然,對於Address類轉換器可在全球範圍內與ConverterLocator連接。只是下面的方法添加到您的應用程序類:
@Override
protected IConverterLocator newConverterLocator() {
ConverterLocator locator = new ConverterLocator();
locator.set(Address.class, new AddressConverter());
return locator;
}
然後你不需要重寫getConverter上的所有文本字段()方法。
非常感謝,它的工作原理) –
我很高興:-);那麼不要忘記接受(並選擇性地提出)答案。 –