ZK - установить выбранный комбо-элемент в Java - PullRequest
0 голосов
/ 11 сентября 2018

Я заполняю элементы поля со списком из ZK Java следующим кодом

combo.setModel(new ListModelArray(this.reasons));
combo.setSelectedItem(combo.getItems().get(2));
combo.setSelectedIndex(3);//tried this as well.

В обоих случаях он бросает

java.lang.IndexOutOfBoundsException: Index: 5, Size: 0
    at org.zkoss.zk.ui.AbstractComponent$ChildIter.<init>(AbstractComponent.java:3267) ~[zk-8.0.2.1.jar:3.6.4]
    at org.zkoss.zk.ui.AbstractComponent$ChildIter.<init>(AbstractComponent.java:3259) ~[zk-8.0.2.1.jar:3.6.4]
    at org.zkoss.zk.ui.AbstractComponent$Children.listIterator(AbstractComponent.java:217) ~[zk-8.0.2.1.jar:3.6.4]

Anyinputs

1 Ответ

0 голосов
/ 13 сентября 2018

При работе с моделью установите выбор для модели напрямую.Комбоэлементы не рендерится с нетерпением, но как только они рендерится, они отражают текущее состояние ListModel.

Либо сохраните ссылку на вашу модель:

ListModelArray<String> reasonsModel = new ListModelArray<>(this.reasons);
combo.setModel(reasonsModel);
reasonsModel.addToSelection(this.reasons[2]);

... или получите ее из выпадающего списка:

ListModelArray<String> reasonsModel = new ListModelArray<>(this.reasons);
combo.setModel(reasonsModel);
...
((Selectable<String>) combo.getModel()).addToSelection(this.reasons[2]);

Чтобы получить текущий выбор модели (возможно, ничего не выбрано):

Optional<String> selected = reasonsModel.getSelection().stream().findAny();
...