XPages-数据绑定问题

时间:2018-10-30 10:27:36

标签: xpages

我在计算数据绑定字段名称时遇到问题。我没有收到任何错误,但是单选按钮处于“禁用”状态。当我将简单的数据绑定放在我知道可以工作的位置上时,无线电就会失去它的“禁用”状态并按预期工作,但显然不会保存到我想要的字段名称中。最终目标是基于两个自定义属性的组合来构建字段名称。我尝试了多种方法,其中一些如下所示:

1.    compositeData.dataSource[compositeData.fieldName #compositeData.radio1LabelText]

    2. compositeData.dataSource[compositeData.fieldName+compositeData.radio1LabelText]

    3. compositeData.dataSource[compositeData.fieldName,compositeData.radio1LabelText]

    4. try{
        var fieldName:string=compositeData.fieldName;
        var fieldLabel:string=compositeData.radio1LabelText;
        return compositeData.dataSource+"."+fieldName+fieldLabel;   
    }catch(e){
        openLogBean.addError(e,this.getParent());
    }

5. compositeData.dataSource[compositeData.fieldName += compositeData.radio1LabelText]

6.compositeData.dataSource[compositeData.fieldName.concat(compositeData.radio1LabelText)] 

谢谢

有关与Jesse聊天的评论的更新:

    <xp:repeat id="repeat1" rows="30"
                        value="#{javascript:compositeData.labels}" var="rptLabels">
                        <tr>
<td>
<xp:panel>
<xp:this.dataContexts>
        <xp:dataContext var="concatRadioName1">
            <xp:this.value><![CDATA[#{javascript:var tmpString = "GIMS"+rptLabels+"Self";
var fieldName = tmpString.replace(/\s+/g, '');
print(fieldName);
return fieldName
}]]></xp:this.value>
        </xp:dataContext>
</xp:this.dataContexts>
                        <xp:radioGroup styleClass="no-margin">


                            <xp:this.value><![CDATA[#{compositeData.dataSource[concatRadioName1]}]]></xp:this.value>

                            <xp:selectItem itemValue="1" itemLabel=""></xp:selectItem>
                            <xp:selectItem itemValue="2" itemLabel=""></xp:selectItem>
                            <xp:selectItem itemValue="3" itemLabel=""></xp:selectItem>
                        </xp:radioGroup>
</xp:panel>

</td>

            </tr>
                    </xp:repeat>

1 个答案:

答案 0 :(得分:2)

无论出于何种原因,XPages中的EL都没有字符串连接运算符,这使这种事情变得棘手。我脑海中浮现出两条可行的潜在路线:

  • 在自定义控件内部,您可以有一个dataContext来连接这两个属性,例如<xp:dataContext var="concatFieldName" value="#{compositeData.fieldName}#{compositeData.radio1LabelText}"/>。然后,您可以稍后在页面中使用#{compositeData.dataSource[concatFieldName]}
  • 如果值是在调用页面上硬编码的,或者可以使用$ {}-binding计算,则可以使用SSJS生成绑定,类似于您在此处的#4中所尝试的。您可以将SSJS计算放在$ {}绑定中,然后将输出作为#{}绑定的字符串版本用于串联字符串。当您进行这样的链接时,运行时将最终正确解析内部运行时绑定。