我正在尝试连接表达式语言中的字符串以访问对象的属性而无法这样做。
在Lotus Notes的XPage中,我想以编程方式选择我想在当前XPage上绑定控件的字段。
我想要达到的结果如下。
#{poDoc[advertisingDateStart];}
我有一个名为fieldName的变量,它将提供“advertisingDate”,只想在此字段中添加“开始”,并在结束日期字段中添加“结束”。我尝试了几种不起作用的变体,例如:
#{poDoc[fieldName{'Start'}];}
请注意,如果我传入“advertisingDateStart”并使用
,它会起作用#{poDoc[fieldName];}
目标是能够在基于配置文档动态绑定时放置开始日期字段和结束日期字段。也就是说,使用配置文档和重复向我的XPage添加字段而不是更改设计。以下是我尝试创建结束日期字段的方法之一:
<xp:inputText id="inputText5"
style="padding-top:2px;text-align:left">
<xp:this.rendered><![CDATA[#{javascript:rowData.getColumnValue("FieldType") == "Date Range"; }]]></xp:this.rendered>
<xp:dateTimeHelper id="dateTimeHelper3"></xp:dateTimeHelper>
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
<xp:this.value><![CDATA[#{javascript:poDoc[fieldName+"End"];}]]></xp:this.value>
</xp:inputText>
我无法理解。
答案 0 :(得分:2)
不幸的是,您无法使用'javascript:'表示法绑定。在SSJS中,无法指向您希望绑定到组件属性的“对象属性”(getter和setter)。
只有表达式语言可以使用点表示法执行此操作。
如果你真的需要绑定到动态字段,你必须在使用它之前计算字段名,如Per Henrik Lausten建议的那样(xp:dataContext是要走的路)。由于您需要来自一个条目的两个日期字段,因此您应该为新值使用不同的变量,使用Javascript计算值
<xp:this.dataContexts>
<xp:dataContext var="fieldName">
<xp:this.value>
<![CDATA[#{javascript:rowData.getColumnValue ("FieldName");}]]>
</xp:this.value>
</xp:dataContext>
<xp:dataContext var="fieldNameDateStart">
<xp:this.value>
<![CDATA[#{javascript:return rowData.getColumnValue ("FieldName") + "Start";}]]>
</xp:this.value>
</xp:dataContext> <xp:dataContext var="fieldNameDateEnd">
<xp:this.value>
<![CDATA[#{javascript:return rowData.getColumnValue ("FieldName") + "End";}]]>
</xp:this.value>
</xp:dataContext>
</xp:this.dataContexts>
fieldName将用于单个字段条目,而其他字段仅用于开始日期和结束日期。