0

我创建了一个列表视图,它将在表视图中显示记录数,并且列表视图内部包含一个文本字段和一个下拉选择字段。

我需要实现的是文本字段的 onchange 以默认下拉选项中特定记录的值。但是似乎在使用以下代码时,当它只有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 刷新的下拉选项也没有被刷新/重新渲染。

4

1 回答 1

0

问题是您将所有文本字段“绑定”到最后一个“评级”,因为它是您班级的私人成员。

当调用“onUpdate”行为时,它将使用在填充项方法范围之外声明的评级成员,因此是在列表视图的最后一次迭代中分配的成员。

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

“评级”变量应在填充项方法中声明。

于 2013-04-21T20:54:12.680 回答