【发布时间】:2013-04-16 09:18:32
【问题描述】:
我创建了一个列表视图,它将在表格视图中显示记录数,并且列表视图内部包含一个文本字段和一个下拉选择字段。
我需要实现的是将文本字段更改为默认下拉选项中特定记录的值。但是似乎在使用以下代码时,当它只有1条记录要更新时,它可以工作,但是当存在多条记录时,它会失败。需要帮忙!提前致谢。
示例代码:
new ListView("list", getItemList()) {
protected void populateItem(ListItem item) {
final Sl qv = (Sl) item.getModelObject();
item.setModel(new CompoundPropertyModel(qv));
ratio = new TextField("ratio");
item.add(ratio);
ratio.setOutputMarkupId(true);
ratio.add(new AjaxFormComponentUpdatingBehavior("onkeyup") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
getProperties().put("rating" + Sl.getid(), "Strong");
target.addComponent(rating);
}
});
rating = new DropDownChoice("rating", getDdlmodels().get(item.getIndex()), ratingList);
item.add(rating);
rating.setOutputMarkupId(true);
}
}
注意:以 ValueMap 属性为键的 PropertyModel (DdlModels) 已用于获取和设置下拉选择的值。在文本字段的 onchange 中,propertyModel 已经更新,但是即使我添加了 ajax 刷新,下拉选择也没有被刷新/重新渲染。
【问题讨论】:
-
您需要将组件添加到列表视图项。所以代替 add(..) 做一个 item.add()。并摆脱那个烦人的 add(varaible = new ..)。很难阅读。
-
感谢您的回复。实际上它已经是 item.add(),在构建简单版本的代码时错过了它。感谢您指出。实际上上面的代码在只有1条记录时工作正常,但在多条记录时失败,我相信它与target.add(rating)有关,我认为不能以这种方式刷新,但我找不到其他方式。
标签: listview wicket dropdownchoice