2017-02-23 169 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

是的,现在一切都正确!谢谢 ! –