Wicket ListView-通过文本字段刷新下拉选项

Wicket ListView-通过文本字段刷新下拉选项,listview,wicket,dropdownchoice,Listview,Wicket,Dropdownchoice,我已经创建了一个列表视图,它将在表视图中显示记录的数量,并且在列表视图中包含一个textfield和一个dropdownchoice字段 我需要实现的是对textfield进行一次更改,以在dropdownchoice中为特定记录设置默认值。但是,当使用以下代码时,当它只有一条记录要更新时,它会工作,但当存在多条记录时,它会失败。需要帮助!提前谢谢 示例代码: new ListView("list", getItemList()) { protected void populateIte

我已经创建了一个列表视图,它将在表视图中显示记录的数量,并且在列表视图中包含一个textfield和一个dropdownchoice字段

我需要实现的是对textfield进行一次更改,以在dropdownchoice中为特定记录设置默认值。但是,当使用以下代码时,当它只有一条记录要更新时,它会工作,但当存在多条记录时,它会失败。需要帮助!提前谢谢

示例代码:

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)已用于获取和设置dropdownchoice的值。一旦更改了textfield,propertyModel就被更新了,但是dropdownchoice没有被刷新/重新呈现,即使我添加了ajax刷新。

问题是,您将所有textfield“绑定”到最后一个“评级”,因为它是类的私有成员

当调用“onUpdate”行为时,它将使用在PopulateItem方法范围之外声明的评级成员,即在listview的最后一次迭代中分配的成员

这就是为什么它只适用于一张唱片。您当前的实现应该只适用于最后一行


“rating”变量应该在populate item方法中声明

您需要将组件添加到列表视图项中。因此,不要添加(…),而是执行item.add()。然后去掉这个新的添加项(varaible=new…)。很难读。谢谢你的回复。实际上,它已经是item.add(),在构造代码的简单版本时忽略了这一点。谢谢你指出。事实上,上面的代码在只有一条记录时工作正常,但在多条记录时失败,我相信这与目标有关。添加(评级),我认为不能用这种方式刷新,但我找不到其他方式。是的!感谢您的回复,在我更改了populateitem方法中的变量声明之后,它就可以工作了。再次感谢!。