【问题标题】:Wicket ListView - refresh dropdownchoice via text fieldWicket ListView - 通过文本字段刷新下拉选择
【发布时间】: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


【解决方案1】:

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

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

这就是为什么它适用于一条记录。您当前的实现应该只适用于最后“行”。

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

【讨论】:

  • 是的!感谢您的回复,在我更改填充项方法中的变量声明后它可以工作。再次感谢!
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多