XPages - 数据绑定问题
XPages - Data binding issue
我在计算数据绑定字段名称时遇到问题。我没有收到任何错误,但是单选按钮处于 "disabled" 状态。当我将简单的数据绑定放在我知道有效的数据上时,收音机会失去它的 "disabled" 状态并按预期工作,但显然不会保存到我想要的字段名称。最终目标是基于 2 个自定义属性的组合构建字段名称。我已经尝试了各种变体,其中一些如下所示:
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>
出于某种原因,XPages 中的 EL 没有字符串连接运算符,这使得这类事情变得棘手。在我的脑海中,我可以想到两条可行的潜在路线:
- 在自定义控件中,您可以有一个
dataContext
连接两个属性,例如 <xp:dataContext var="concatFieldName" value="#{compositeData.fieldName}#{compositeData.radio1LabelText}"/>
。然后,您可以稍后在页面中使用 #{compositeData.dataSource[concatFieldName]}
。
- 如果值是在调用页面上硬编码的或者可以使用 ${} 绑定计算,您可以使用 SSJS 生成绑定,类似于您在#4 中尝试的那样。您可以将 SSJS 计算放在 ${} 绑定中,然后让输出成为串联字符串的 #{} 绑定的字符串版本。当您执行这样的链时,运行时将最终正确解析内部运行时绑定。
我在计算数据绑定字段名称时遇到问题。我没有收到任何错误,但是单选按钮处于 "disabled" 状态。当我将简单的数据绑定放在我知道有效的数据上时,收音机会失去它的 "disabled" 状态并按预期工作,但显然不会保存到我想要的字段名称。最终目标是基于 2 个自定义属性的组合构建字段名称。我已经尝试了各种变体,其中一些如下所示:
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>
出于某种原因,XPages 中的 EL 没有字符串连接运算符,这使得这类事情变得棘手。在我的脑海中,我可以想到两条可行的潜在路线:
- 在自定义控件中,您可以有一个
dataContext
连接两个属性,例如<xp:dataContext var="concatFieldName" value="#{compositeData.fieldName}#{compositeData.radio1LabelText}"/>
。然后,您可以稍后在页面中使用#{compositeData.dataSource[concatFieldName]}
。 - 如果值是在调用页面上硬编码的或者可以使用 ${} 绑定计算,您可以使用 SSJS 生成绑定,类似于您在#4 中尝试的那样。您可以将 SSJS 计算放在 ${} 绑定中,然后让输出成为串联字符串的 #{} 绑定的字符串版本。当您执行这样的链时,运行时将最终正确解析内部运行时绑定。