Группа комбобоксов динамически в ЗК

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

Мне нужно добавить N combobox, их ярлыки и заполнить их динамически. Есть ли способ создать эту группу со списком и установить их динамически? Есть идеи?

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

//In this example I assume I have a label and a combobox. But could have 0 to N of them.

private Label lblComboMetadatos;
private Combobox cmbMetadatos;

//THEN

if (cmbMetadatos.getItemCount() == 0) {
  lblComboMetadatos.setValue(trdMetaTipoDocumental.getNombreMetadato()); //Here I set the name of label but I should really can not know how many of them could be. There may exist 0..N 
  for (TrdMetadato trdMetaDato: trdMetaTipoDocumental.getTrdMetadatos()) {

    String enumValores = trdMetaDato.getValoresEnumerado(); //Here I set the values of a combobox but I can not know how many of them could be. There may exist 0..N  
    cmbMetadatos.appendItem(enumValores]);
}

}
<zk>
  <window id="idWindow" title="nameWindow" apply="controller.java" border="normal" closable="true" sizable="true" maximizable="true" maximized="true" height="85%" width="150%" style="overflow:auto;">
    <!-- CONTINUES -->
    <groupbox>
      <hlayout>
        <label id="lblComboMetadatos" />
        <combobox id="cmbMetadatos"></combobox>
      </hlayout>
    </groupbox>
    <!-- CONTINUES -->
  </window>
</zk>

1 ответ

Решение

Этот вопрос очень похож на ваш последний вопрос. Вы должны подключить родительский контейнер (hlayout в данном случае) к вашему контроллеру, а затем создайте там компоненты.

@Wire
private Component container; // your hlayout

@Override  // This method should be specified by a composer super class
public void doAfterCompose(Component comp) throws Exception
    for (<count an index or loop over data>) {
        hlayout.appendChild(new Label("Hello World");
        Combobox cb = new Combobox();
        // append Comboitems
        cb.addEventListener(Events.ON_SELECT, ...);
        hlayout.appendChild(cb);
    }
}

Если вы используете MVVM, вы можете использовать привязку дочерних элементов для создания компонентов в zul.

Другие вопросы по тегам