使用Repeater显示多值字段值

时间:2014-08-11 16:49:30

标签: xpages xpages-ssjs

我已经设置了转发器并使用GetItemValueArray从多值字段中读取值。这将返回数组,如果我使用列表框则会显示。我想用它交叉引用其他一些数据,所以我需要使用转发器。但我不确定如何让转发器使用每行递增的索引。下面的代码"返回rowdata [i]"不认识我。

<xp:repeat id="repeat1" var="rowdata" rows="30">
    <xp:this.value>
       <![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld")}]]>
    </xp:this.value>
    <xp:label id="lbl">
        <xp:this.value><![CDATA[#{javascript:return rowdata[i];}]]></xp:this.value>
    </xp:label>
</xp:repeat>

6 个答案:

答案 0 :(得分:5)

rowdata不是对整个myArray值的引用,而是myArray中的迭代条目。换句话说......你已经拥有了你需要的东西。

<xp:label value="#{rowdata}" />

答案 1 :(得分:1)

也许您可以通过仅使用“rowdata”作为文本项的值进行命名来简化代码。然后,您应该只将重复源更改为

myDataSource.getItemValue("myValueFld")

因为它总是返回一个数据数组。它只取决于此项存储的数据类型,因此您可能必须在文本控件中进行转换。

答案 2 :(得分:1)

您的代码有另一个问题,您在此行中没有任何return语句:

<xp:this.value>
   <![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld")}]>
</xp:this.value>

所以代码不会返回你的myArray它只返回它的名字作为一次重复的字符串。使用这个值绑定:

value="#{myDataSource.MyMultiValueFld}"

或添加return

    <xp:this.value>
       <![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld");
 return myArray;}]>
    </xp:this.value>

然后你应该可以使用Chris Tooheys答案:

<xp:label value="#{rowdata}"/>

答案 3 :(得分:0)

使用重复控件的indexVar属性设置包含索引的var。

答案 4 :(得分:0)

知道了。最后一段代码是我必须创建一个indexVar =&#34;我&#34;在我的repeat1标签中,但我还必须将我的标签更改为计算字段。最后一段代码如下:

<xp:table>
    <xp:repeat id="repeat1" var="rowdata" rows="30" indexVar="i" first="0">
        <xp:this.value><![CDATA[#{javascript:myDataSource.getItemValueArray("myMultivalueFld");}]]>
        </xp:this.value>
        <xp:tr><xp:td>
            <xp:text escape="true" id="computedField1">
                <xp:this.value><![CDATA[#{javascript:var repeat1:com.ibm.xsp.component.xp.XspDataIterator = getComponent("repeat1");
                      repeat1.getValue()[i];}]]></xp:this.value>
            </xp:text>
        </xp:td>
       </xp:tr>
    </xp:repeat>
</xp:table>
如果没有indexVar上的花絮,我不会认为我能得到它。感谢

答案 5 :(得分:0)

您可以进一步修剪该代码。如果您只需要值,则不需要indexvar,也不需要将repeat作为XspDataIterator引用。只需使用rowdata作为变量。

<xp:table>
<xp:repeat id="repeat1" var="rowdata" rows="30">
    <xp:this.value><![CDATA[#{javascript:myDataSource.getItemValueArray("myMultivalueFld");}]]>
    </xp:this.value>
    <xp:tr><xp:td>
        <xp:text escape="true" id="computedField1">
            <xp:this.value><![CDATA[#{javascript:rowdata;}]]></xp:this.value>
        </xp:text>
    </xp:td>
   </xp:tr>
</xp:repeat>

多值字段中的每个值都是rowdata引用的“行”。同样,如果数据源是视图,则每行都将引用文档对象。不要通过从组件内部访问repeat作为组件来处置可用的框架。