Vaadin привязка данных между ListSelect и java.util.List <String> - PullRequest
1 голос
/ 16 января 2012

Я новичок в vaadin и у меня проблема с привязкой данных.Я уже опубликовал сообщение на форуме vaadin, но до сих пор не получил ответа.если вы ответите здесь, я, конечно, все равно вознагражу его.

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

заранее спасибо.привет, Андреас

Дополнительная информация: Я уже пытался перебирать элементы в контейнере после нажатия кнопки сохранения.После удаления всех исходных элементов в коллекции моделей и добавления копий из контейнера графический интерфейс разрывается.Некоторые другие элементы GUI больше не отвечают.

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Лично я никогда не использовал ListSelect, но я нашел это в API документах :

Это простой список выбора без, например, поддержки новых элементов,отложенная загрузка и другие расширенные функции.

Я бы порекомендовал 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 вы можете добавить свойство String, вызвав myIndexedContainer.addContainerProperty("caption", String.class, ""); и присвоить каждому элементу уникальный itemId (или позволить контейнеру автоматически генерировать идентификаторы).

1 голос
/ 16 января 2012

Я не уверен, что понимаю вашу проблему, но я верю, что, возможно, вы не сказали контролеру перекрасить. Вы делаете это, устанавливая источник данных таким образом после того, как произошло событие сохранения.

listSelect.setContainerDataSource(listSelect.getContainerDataSource());
...