在ND9中带有组合框的xpages编号转换器

时间:2013-05-17 10:05:23

标签: xpages lotus-domino

我在Domino 9服务器上的xpages中的组合框中使用numberConvert进行数字转换时遇到问题。这曾经用于8.5服务器。

当我提交我得到的值时:验证错误:值无效

我还尝试使用“new javax.faces.model.SelectItem”填充值,但这没有任何区别。

有人知道如何在ND9的组合框中使用数字吗?

这是源代码(我删除了此示例中不必要的所有内容):

<xp:comboBox id="combo" value="#{viewScope.testfield}">
    <xp:this.converter>
        <xp:convertNumber type="number"></xp:convertNumber>
    </xp:this.converter>
    <xp:selectItem itemLabel="9" id="selectItem1" itemValue="9">
    </xp:selectItem>
    <xp:selectItems>
        <xp:this.value><![CDATA[#{javascript:var arr=new Array("0","1","2"); return arr;}]]></xp:this.value>
    </xp:selectItems>
</xp:comboBox>

<xp:message id="message1" for="combo"></xp:message>

<xp:button value="Label" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action>
            <xp:save></xp:save>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>

2 个答案:

答案 0 :(得分:2)

请确保字段'testField'在基础表单上的类型为'Number'。 我在8.5.3服务器上遇到了同样的问题。所以,我写了下面的代码来克服这个问题。

    <xp:selectItems>
     <xp:this.value><![CDATA[#{javascript:
var arr = ['0','1','2']
var comboOptions = [];
for (i = 0; i < arr.length; i++){   
    comboOptions.push(new javax.faces.model.SelectItem(parseFloat(arr[i]), arr[i]))
}
return comboOptions}]]>
 </xp:this.value>
</xp:selectItems>

如果您知道如何使用托管bean,则可以简化上述代码。 下面是bean的代码。

public class ApplicationSettings implements Serializable{
 private static final long serialVersionUID = 1L;
 private List comboOptions;

 public ApplicationSettings(){
  loadDefaults();
 }

 public void loadDefaults(){
  for(int x = 0; x <= 3; x = x+1){
   SelectItem item = new SelectItem(new Double(x),""+x);
   comboOptions.add(item);
  }
 }

 public List getComboOptions() {
  return comboOptions;
 }
 public void setComboOptions(List comboOptions) {
  this.comboOptions = comboOptions;
 }
}

在faces-configxml中,注册托管bean(名称:ApplicationSettings,scope:application)。 然后在你的xpage ..

<xp:selectItems value="#{ApplicationSettings.comboOptions}"></xp:selectItems>

答案 1 :(得分:0)

编辑:

如果要在ComboBox中选择数字,则必须将comboBox的可能值定义为数字数组,而不是字符串。

enter image description here

<xp:this.beforePageLoad><![CDATA[#{javascript:viewScope.testfield = 1}]]></xp:this.beforePageLoad>

<xp:comboBox id="combo" value="#{testfield}">
    <xp:selectItem itemLabel="0" itemValue="${javascript:0}"></xp:selectItem>
    <xp:selectItem itemLabel="1" itemValue="${javascript:1}"></xp:selectItem>
    <xp:selectItem itemLabel="2" itemValue="${javascript:2}"></xp:selectItem>
</xp:comboBox>

如果值是范围变量,则此示例在使用转换器时完美

如果你有一个灵活的参赛作品数量,你可以使用Adibabu Kancharla答案中显示的两种方式。

数字转换器是绑定到文档编号字段所必需的。以下示例适用于ND853和ND9。我不得不添加integerOnly="true"

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.data>
        <xp:dominoDocument var="document1" formName="NumberTest"
            action="editDocument"
            documentId="477FF8697EE50EDBC1257B710073DDE3">
        </xp:dominoDocument>
    </xp:this.data>
    <xp:comboBox id="combo" value="#{document1.Number}">
        <xp:selectItem itemLabel="0" itemValue="${javascript:0}"></xp:selectItem>
        <xp:selectItem itemLabel="1" itemValue="${javascript:1}"></xp:selectItem>
        <xp:selectItem itemLabel="2" itemValue="${javascript:2}"></xp:selectItem>
        <xp:this.converter>
            <xp:convertNumber type="number" integerOnly="true"></xp:convertNumber>
        </xp:this.converter>
    </xp:comboBox>
    <xp:message id="message1" for="combo"></xp:message>

    <xp:button value="Label" id="button1">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="complete">
            <xp:this.action>
                <xp:save></xp:save>
            </xp:this.action>
        </xp:eventHandler>
    </xp:button>
</xp:view>