2

我在 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>

4

2 回答 2

2

请确保字段“testField”在基础表单上属于“数字”类型。我在 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,范围:应用程序)。然后在你的xpage..

<xp:selectItems value="#{ApplicationSettings.comboOptions}"></xp:selectItems>
于 2013-05-17T15:25:41.090 回答
0

编辑:

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

在此处输入图像描述

<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>
于 2013-05-17T21:16:45.393 回答