Xpages 基于组合框选择的日期控件计算显示格式

Xpages 基于组合框选择的日期控件计算显示格式,xpages,Xpages,我试图根据组合框选择更改日期/时间控件的显示格式。我想这很简单 我将js if语句与getComponent一起使用,而不是datasource.getValue,因为我认为它会在提交之前获取值。我收到一个组件为空的错误 有人能解释为什么我在这里得到null,但在一个带有getcomponent的computedField中,值显示为空吗 if (getComponent('comboBox1').getValue()==0) {'both'} else {'date'} 转

我试图根据组合框选择更改日期/时间控件的显示格式。我想这很简单

我将js if语句与getComponent一起使用,而不是datasource.getValue,因为我认为它会在提交之前获取值。我收到一个组件为空的错误

有人能解释为什么我在这里得到null,但在一个带有getcomponent的computedField中,值显示为空吗

if (getComponent('comboBox1').getValue()==0)
    {'both'}

else
    {'date'}

转换器的类型是在页面加载期间计算的,在此期间,不可能使用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>

在本例中,日期字段为InputExt1,如下所示:

<xp:inputText id="inputText1">
   <xp:this.converter>
      <xp:convertDateTime type="time" />
   </xp:this.converter>
   <xp:dateTimeHelper />
</xp:inputText>