2017-02-23 1 views
1

J'ai un contrôle de répétition et remplit un checkboxgroup avec des éléments d'un tableau viewScope. Exemple de code est:checkboxgroup ne renvoie que la dernière valeur sélectionnée

<xp:repeat id="repeat4" rows="100" value="#{viewScope.choices}" 
    indexVar="rownumber" var="row" first="0"> 

    <xp:checkBoxGroup id="checkBoxGroup2" layout="lineDirection"> 
     <xp:selectItems> 
      <xp:this.value><![CDATA[#{javascript:if (viewScope.choices[rownumber].get(1)==viewScope.line){ 
      return viewScope.choices[rownumber].get(0) 
      }}]]></xp:this.value> 
     </xp:selectItems> 
    </xp:checkBoxGroup> 
    <xe:tooltip id="tooltip1" for="checkBoxGroup2"> 
     <xe:this.label><![CDATA[#{javascript:return viewScope.choices[rownumber].get(1)}]]></xe:this.label> 
    </xe:tooltip> 
</xp:repeat> 

Je lis les valeurs vérifiées avec: (. getComponent ("checkBoxGroup2") getSubmittedValue()) @Text;

Le problème est qu'il semble que je ne peux que lire la dernière valeur sélectionnée/désélectionnée de cette façon.

Je suppose que cela a quelque chose à voir avec les éléments selected qui ne retourne pas un tableau, mais comment puis-je retourner un tableau avec les données données?

+0

Est-ce que 'viewScope.choices [rownumber] .get (0)' est une valeur unique ou un tableau? –

+0

Pour chaque numéro de client, une seule valeur sera retournée. Puisque la répétition va sur tous les rownumbers, à la fin, beaucoup de valeurs seront retournées –

Répondre

0

Vous ne pouvez pas utiliser checkBoxGroup dans ce cas. Chaque checkBoxGroup créé par repeat est un propre contrôle et ils ne sont pas connectés les uns aux autres.

utiliser un simple contrôle au lieu checkBox et écrire les valeurs choisies en fonction du tableau de variables de portée:

<xp:this.beforePageLoad><![CDATA[#{javascript: 
    if (!viewScope.selected) { 
     viewScope.selected = new Array(viewScope.choices.length); 
    } 
}]]></xp:this.beforePageLoad> 
<xp:repeat 
    id="repeat4" 
    rows="100" 
    value="#{javascript:viewScope.choices}" 
    indexVar="rownumber" 
    var="row" 
    first="0"> 
    <xp:panel 
     id="panelCheckBox" 
     style="display: inline-block;"> 
     <xp:checkBox 
      id="checkBox1" 
      text="#{row[0]}" 
      value="#{viewScope.selected[rownumber]}" 
      checkedValue="#{row[0]}" 
      uncheckedValue="#{javascript:''}" /> 
    </xp:panel> 
    <xe:tooltip 
     id="tooltip1" 
     for="panelCheckBox" 
     position="below" 
     label="#{row[1]}" /> 
</xp:repeat> 

Le résultat est alors viewScope.selected.

+0

Cela semble fonctionner de cette façon, mais les cases à cocher sont affichées 1 par ligne. J'ai besoin qu'ils soient affichés sur 1 ligne. Quand j'ai enveloppé une table autour de lui, j'ai été surpris que l'info-bulle ne s'affiche que lorsque je passe la souris sur la case et non lorsque je survole le texte des cases à cocher. J'ai aussi dû changer le for = panelcheckBox dans for = checkBox ou l'infobulle cesse de fonctionner. Une idée de comment le faire fonctionner avec survoler le texte et afficher les éléments horizontalement? –

+0

Donnez au panneau "panelCheckBox" le style 'display: inline-block; Cela place les checkBoxes dans une ligne et affiche toujours l'info-bulle au-dessus du texte. –

+0

oui, maintenant tout est correct! Je vous remercie ! –