2017-02-23 3 views
1

Ich habe ein Wiederholungssteuerelement und fülle eine Checkbox-Gruppe mit Elementen aus einem viewScope-Array. Beispielcode ist:checkboxgroup gibt nur den zuletzt ausgewählten Wert zurück

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

ich die überprüften Werte mit dem Lesen: (. GetComponent ("checkBoxGroup2") getSubmittedValue()) @Text;

Das Problem ist, dass es scheint, dass ich nur den letzten ausgewählten/abgelesenen Wert auf diese Weise lesen kann.

Ich denke, es hat etwas mit den ausgewählten Elementen zu tun, die kein Array zurückgibt, aber wie kann ich ein Array mit den angegebenen Daten zurückgeben?

+0

Ist 'viewScope.choices [rownumber] .get (0)' ein einzelner Wert oder ein Array? –

+0

Für jede Nummer wird nur 1 Wert zurückgegeben. Da die Wiederholung über alle Zeilennummern hinausgeht, werden am Ende viele Werte zurückgegeben. –

Antwort

0

In diesem Fall können Sie checkBoxGroup nicht verwenden. Jede checkBoxGroup, die von repeat erstellt wird, ist ein eigenes Steuerelement und sie sind nicht miteinander verbunden.

Verwenden eine einfache checkBox Steuerung statt und variable Anordnung der ausgewählten Werte in Viewbereich schreiben:

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

Das Ergebnis ist in viewScope.selected dann.

+0

Scheint so zu funktionieren, aber Checkboxen werden 1 pro Zeile angezeigt. Ich brauche sie in einer Zeile angezeigt werden. Als ich einen Tisch darum gewickelt habe, war ich überrascht, dass der Tooltip nur angezeigt wird, wenn ich über die Box schwebe und nicht, wenn ich über den Text der Checkboxen schwebe. Ich musste auch die for = panelcheckBox in for = checkBox ändern oder die Tooltip funktioniert nicht mehr. Irgendeine Idee, wie man es mit Hover über Text auch arbeiten lässt und die Einzelteile horizontal anzeigt? –

+0

Geben Sie dem Panel "panelCheckBox" den Stil 'display: inline-block;'. Dies setzt die CheckBoxen in eine Zeile und zeigt weiterhin den Tooltip über dem Text an. –

+0

ja, jetzt ist alles korrekt! Vielen Dank ! –

Verwandte Themen