我在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>
答案 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的可能值定义为数字数组,而不是字符串。
<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>