powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin ComboBox - отложенная загрузка списка
2 сообщений из 2, страница 1 из 1
Vaadin ComboBox - отложенная загрузка списка
    #38580708
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма с компонентами, форма кешируемая. Среди компонентов есть комбобоксы, для выбора из справочников.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	protected FieldGroup binder;
        ComboBox parentCBox;
......

		parentCBox = new ComboBox("Входит в состав");
		parentCBox.setPageLength(0);			
		loadParentCBox(); // в этой процедуре создается BeanItemContainer и цепляется к ComboBox как источник элементов.
		binder.bind(parentCBox, "parent");				



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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
	int flParentLoaded = -1; // Валидатор отработает один раз при загрузке формы, поэтому первый раз ничего делать не надо
	protected FieldGroup binder;
        ComboBox parentCBox;

...

		parentCBox = new ComboBox("Входит в состав");
		parentCBox.setPageLength(0);			
		if (getItem().getParent() != null)
			parentCBox.addItem(getItem().getParent());
		// loadParentCBox();
		binder.bind(parentCBox, "parent");					

		parentCBox.addValidator(new Validator() {
			@Override
			public void validate(Object value) throws InvalidValueException {
				if (flParentLoaded == 0){
					loadParentCBox();
				}
				flParentLoaded++;
			}
		});



Однако появилась одна нехорошая проблема. Если валидатор отрабатывал, то сохранение отрабатывало. Если компонент не трогали, а меняли только другие компоненты, то
Код: java
1.
binder.commit()

вылетал с ошибкой Commit failed!

Проблема была решена с помошью перепривязки ComboBox, чтобы неизменный компонент не писал себя.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
	int flParentLoaded = -1; 
	protected FieldGroup binder;
        ComboBox parentCBox;

....
		parentCBox = new ComboBox("Входит в состав");
		parentCBox.setPageLength(0);			
		if (getItem().getParent() != null)
			parentCBox.addItem(getItem().getParent());
		binder.bind(parentCBox, "parent");				
		binder.unbind(parentCBox); // отвзязали компонент
		
		mainLayout.addComponent(parentCBox);

		parentCBox.addValidator(new Validator() {
			@Override
			public void validate(Object value) throws InvalidValueException {
				if (flParentLoaded == 0){
					loadParentCBox();
					binder.bind(parentCBox, "parent"); // привязываем назад, если пытались редактировать
				}
				flParentLoaded++;
			}
		});



А теперь вопрос: Можно ли как-то изящней реализовать отложенную загрузку списка?
...
Рейтинг: 0 / 0
Vaadin ComboBox - отложенная загрузка списка
    #38582795
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://dev.vaadin.com/ticket/4233

Написали, что вроде как без всякого рукожопства ленивая подгрузка таки сделана для комбобокса. Сам не пользовал.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin ComboBox - отложенная загрузка списка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]