我有一个简单的面板(面板本身是更大的形式的一部分)与CheckGroup。检查组中的复选框在列表视图组件中生成。我需要动态地更改此面板,每次更改时我都需要检索所选项目。面板的代码基本上如下所示:
CheckGroup<MyObject> group = new CheckGroup<MyObject>(ID, selectedObjects);
ListView<MyObject> objectList = new ListView<MyObject>(ID, values) {
@Override
protected void populateItem(ListItem<MyObject> item) {
Check<MyObject> check = new Check<MyObject>(TIME_CHECK, item.getModel());
Label l = new Label(TIME_LABEL, item.getModel());
item.add(check);
item.add(l);
}
}
group.add(objectList);
group.add(new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("Selected objects: "+selectedObjects.size());
}
});
add(group);
现在,问题是,每当我点击复选框时,两个相同的对象都会添加到selectedObjects
列表中。如果我删除AjaxFormChoiceComponentUpdatingBehavior
,则不会在列表中添加任何对象(这是有道理的,因为此时我还没有提交表单)。
我不确定如何解决这个问题,我提出的最佳解决方案是获取列表并通过它,删除重复项。
此外,抱歉标题,但我不知道如何命名这个问题。
以下是澄清问题的一个小例子: 让我们说检查组正在显示这些对象:
object 1
object 2
object 3
object 4
object 5
然后,当我选择object 1
时,检查组(= selectedObjects)的模型将如下所示:
object 1
object 1
答案 0 :(得分:1)
这是关于检票口的错误。我使用版本7.1然后在版本7.10上更改,问题解决了!
答案 1 :(得分:0)
尝试
target.add(form);`
或
target.add(group);
或类似的东西,具体取决于您的代码。
答案 2 :(得分:0)
您可以尝试以下构造,重新创建检查组,使其保持最新状态。也许有点矫枉过正,但它应该可以解决问题。
private CheckGroup<MyObject> group;
private IModel<MyObject> selectedObjects;
public MyCurrentPanel() {
selectedObjects = new CompoundPropertyModel<MyObject>(new MyObject());
group = createCheckGroup();
group.setOutputMarkupId(true);
add(group);
}
public CheckGroup<MyObject> createCheckGroup() {
CheckGroup<MyObject> newGroup = new CheckGroup<MyObject>(ID, MyCurrentPanel.this.selectedObjects);
ListView<MyObject> objectList = new ListView<MyObject>(ID, values) {
@Override
protected void populateItem(ListItem<MyObject> item) {
Check<MyObject> check = new Check<MyObject>(TIME_CHECK, item.getModel());
Label l = new Label(TIME_LABEL, item.getModel());
item.add(check);
item.add(l);
}
}
newGroup.add(objectList);
newGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("Selected objects: "+selectedObjects.size());
CheckGroup<MyObject> updateGroup = createCheckGroup();
updateGroup.setOutpurMarkupId(true);
MyCurrentPanel.this.group.replaceWith(updateGroup);
MyCurrentPanel.this.group = updateGroup;
target.add(MyCurrentPanel.this.group);
}
});
}