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

时间:2014-03-18 23:10:06

标签: xpages

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

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

任何人都可以解释为什么我在这里得到null但是在带有getcomponent的computedField中显示的值是什么?

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

else
    {'date'}

1 个答案:

答案 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>