2017-02-23 82 views
1

我有一個重複控制和填充用來自viewScope陣列項checkboxgroup。示例代碼:checkboxgroup只返回最後選擇的值

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

我與讀取檢查的值:(getComponent( 「checkBoxGroup2」)getSubmittedValue())@Text;

的問題是,它似乎我只能讀取最後一次選擇/取消值這種方式。

我猜它是與未返回一個數組的selecteditems,但我怎麼能返回與給定的數據數組?

+0

是'viewScope.choices [ROWNUMBER]獲得(0)'單個值或數組? –

+0

對於每個數字,只返回1個數值。由於重複越過所有rownumbers,截至去年底,很多值將返回 –

回答

0

您不能在這種情況下使用checkBoxGroup。每個由重複創建的checkBoxGroup都是一個自己的控件,並且它們沒有互相連接。

使用簡單checkBox控制來代替,而在視圖範圍變量數組寫入所選擇的值:

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

結果是viewScope.selected然後。

+0

似乎這樣的工作方式,但複選框顯示1每行。我需要將它們顯示在1行上。當我圍着桌子包裹一張桌子時,我驚訝地發現只有當我將鼠標懸停在框上時才顯示工具提示,而不是當我將鼠標懸停在複選框的文本上時。我還必須將for = panelcheckBox更改爲for = checkBox或工具提示停止工作。任何想法如何使它懸停在文本上也可以水平顯示項目? –

+0

給面板「panelCheckBox」樣式'display:inline-block;'。這將複選框放入一行,並仍然顯示懸停在文本上的工具提示。 –

+0

是的,現在一切都正確!謝謝 ! –