ListSelect和java.util.List之间的Vaadin数据绑定<string> </string>

时间:2012-01-16 14:43:20

标签: data-binding collections vaadin

我是vaadin的新手并且存在数据绑定问题。我已经在vaadin论坛上发布了所有内容,但到目前为止还没有答案。 如果你在这里回答,我当然会奖励它。

https://vaadin.com/forum/-/message_boards/view_message/1057226

提前谢谢。 映入眼帘, 安德烈亚斯

附加信息:按下保存按钮后,我尝试全部迭代容器中的项目。删除模型集合中的所有原始元素,并从容器中添加副本后,GUI会中断。其他一些GUI元素不再响应。

2 个答案:

答案 0 :(得分:3)

我个人从未使用过ListSelect,但我是从API docs发现的:

  

这是一个简单的列表选择,例如,不支持新项目,延迟加载和其他高级功能。

我建议BeanItemContainer。您可以像这样使用它:

// Create a list of Strings
List<String> strings = new ArrayList<String>();
strings.add("Hello");

// Create a BeanItemContainer and include strings list
final BeanItemContainer<String> container = new BeanItemContainer<String>(strings);
container.addBean("World");

// Create a ListSelect and make BeanItemContainer its data container
ListSelect select = new ListSelect("", container);

// Create a button that adds "!" to the list
Button button = new Button("Add to list", new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        container.addBean("!");
    }
}

// Add the components to a layout
myLayout.addComponent(button);
myLayout.addComponent(select);

这样做的缺点(或好处,取决于:)是您无法向BeanItemContainer添加重复条目。在上面的示例中,感叹号仅添加一次。

您可以致电:

获取字符串集合
Collection<String> strings = container.getItemIds();

如果您需要支持重复条目,请查看IndexedContainer。使用IndexedContainer,您可以通过调用myIndexedContainer.addContainerProperty("caption", String.class, "");添加String属性,并为每个Item提供唯一的itemId(或让容器自动生成id)。

答案 1 :(得分:1)

我不确定我理解你的问题,但我相信你可能没有告诉控制器重绘。你这样做是在发生保存事件后设置这样的数据源。

listSelect.setContainerDataSource(listSelect.getContainerDataSource());