我正在尝试根据组合框选择更改日期/时间控件的显示格式。我觉得这很简单。
我正在使用带有getComponent的js if语句而不是datasource.getValue,因为我认为它会在提交之前获取值。我收到一个组件为空的错误。
任何人都可以解释为什么我在这里得到null但是在带有getcomponent的computedField中显示的值是什么?
if (getComponent('comboBox1').getValue()==0)
{'both'}
else
{'date'}
答案 0 :(得分:2)
在页面加载期间计算转换器的类型,在此期间,无法使用 getComponent 方法访问组件。另外,不可能以这种方式重新计算转换器的类型。事件如果您使用页面加载/动态技巧,转换器的类型将不会重新计算。
但您可以在部分刷新中更改转换器的类型:
<xp:comboBox id="comboBox1">
<xp:selectItem itemLabel="One" itemValue="1"></xp:selectItem>
<xp:selectItem itemLabel="Null" itemValue="0"></xp:selectItem>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="inputText1">
<xp:this.action><![CDATA[#{javascript:
var cmp:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText1");
var converter:com.ibm.xsp.convert.DateTimeConverter = cmp.getConverter();
var value = getComponent("comboBox1").getValue();
if( value == 0) {
converter.setType("both");
}else{
converter.setType("date");
}
}]]>
</xp:this.action>
</xp:eventHandler>
</xp:comboBox>
在此示例中,日期字段为 inputText1 ,如下所示:
<xp:inputText id="inputText1">
<xp:this.converter>
<xp:convertDateTime type="time" />
</xp:this.converter>
<xp:dateTimeHelper />
</xp:inputText>