2017-06-29 6 views
0

Je suis totalement nouveau dans ZK. Je dois créer N listheaders et N listcells dans mon fichier zul. Mais je ne sais pas comment le faire à partir de mon contrôleur Java et je suis pas en utilisant MVVM.Comment ajouter dynamiquement des listheaders et des listcells dans ZK

Le problème serait quelque chose comme:

@Wire 
    private Window idWindow; 

    private Listheader header; 
    private Listcell item1; 

    @Override 
    public void onCreate(Event event) { 

    header.setLabel("laaaa");// It would set just one header but I can have many (N headers) and same for items 

    } 
<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 --> 

    <listbox id="mainList" hflex="1" vflex="1"> 
     <listhead> 
      <listheader id="header" label="A" /> 
      <listheader id="header1" label="B" /> 
      <listheader id="header2" label="C" /> 
      .... 
      <listheader id="headerN" label="N" />    
     </listhead> 
     <listitem> 
      <listcell id="item1" label="A"/> 
      <listcell id="item2" label="B"/> 
      <listcell id="item3" label="C"/> 
      .... 
      <listcell id="itemN" label="D"/> 
     </listitem> 
    </listbox> 

    <!-- CONTINUES --> 
    </window> 
</zk> 

Répondre

1

Vous pouvez laisser le listhead vide dans le Zul, le fil dans votre contrôleur et créer là listheaders. L'étape importante consiste à demander le listbox pour son listhead, et d'y ajouter le listheaders. Pour les cellules, donnez à votre listbox un rendu qui les crée pour chaque élément si vous utilisez un modèle pour donner vos données de liste.

Votre adm sera beaucoup plus courte:

<zk> 
    <window ... > 
     <listbox id="mainList" hflex="1" vflex="1"> 
      <listhead /> 
     </listbox> 
    </window> 
</zk> 

Ensuite, dans votre contrôleur, vous créez l'en-tête doAfterCompose et attacher le moteur de rendu:

@Wire 
private Listbox mainList; 

@Override // This method should be specified by a composer super class 
public void doAfterCompose(Component comp)throws Exception 
{ 
    super.doAfterCompose(comp); 

    mainList.setModel(someModelWithYourData); 

    // create listheaders (manually/in for-loop/based on data...) 
    Listhead head = mainList.getListhead(); 
    head.appendChild(new Listheader("A")); 
    ... 

    // attach renderer 
    mainList.setItemRenderer(new ListitemRenderer<Object>() // use proper data type instead of Object 
    { 
     @Override 
     public void render(Listitem item, Object data, int index) 
      throws Exception 
     { 
      item.appendChild(new Listcell("a")); 
      ... 
     } 
    }); 
} 

Il est aussi un exemple sur les sites de développement de ZK Si vous ne pouvez pas utiliser un modèle, vous pouvez également ajouter le listitems dans le zul ou dans le contrôleur, puis créer les listcells:

for (Component child : mainList.getChildren()) 
{ 
    if (child instanceof Listitem) 
    { 
     Listitem item = (Listitem) child; 
     // do the same as in the renderer 
    } 
} 
+0

Merci beaucoup. Cela fonctionne, je ne pouvais pas utiliser avec le modèle mais l'inverse fonctionnait. –