看到这篇文章:Wicket Model magic: Map-backed ListView
public CustomFieldsPanel(String id, final IModel<Map<String,ProductCustomField>> fieldMapModel, final FeedbackPanel feedbackPanel) {
super(id, fieldMapModel);
this.feedbackPanel = feedbackPanel;
this.setOutputMarkupId(true); // AJAX JavaScript code needs to have some id="...".
IModel<List<ProductCustomField>> listModel = new LoadableDetachableModel() {
@Override protected List<ProductCustomField> load() {
Map<String,ProductCustomField> map = (Map) CustomFieldsPanel.this.getDefaultModelObject();
return new ArrayList(map.values());
}
};
ListView<ProductCustomField> listView;
add(listView = new ListView<ProductCustomField>("fieldsRows", listModel){
@Override
protected void populateItem(final ListItem<ProductCustomField> item) {
item.add(new CustomFieldRowPanel("fieldRow", item.getModel()){
// Delete icon was clicked.
@Override
protected void onDelete(AjaxRequestTarget target) {
Map<String,ProductCustomField> fieldsMap = (Map) CustomFieldsPanel.this.getDefaultModelObject();
fieldsMap.remove(item.getModelObject().getName());
target.add(CustomFieldsPanel.this); // Update UI.
try {
CustomFieldsPanel.this.onChange(target); // Persists.
} catch (Exception ex){
feedbackPanel.error(ex.toString());
}
}
});
}
});
...
}
这是只读?地图的关键/价值是什么? – bert 2012-04-27 17:14:15
该地图包含由用户通过表单/ ajax动态添加的项目和数量。关键值是项目 - >数量,其中项目是我POJ代表的业务对象。 – thatidiotguy 2012-04-27 18:43:17
为什么不迭代KeySet(如ListView的Model),然后将值分配给键? – 2012-04-27 19:29:34