Validation 如何在组合框中显示选定的数值

Validation 如何在组合框中显示选定的数值,validation,combobox,xpages,numeric,Validation,Combobox,Xpages,Numeric,我在Notes表单中有一个数字字段连接到xpage中的组合框。组合框中的值是十进制值(1,02、1,03等)的列表,但它们作为文本存储在关键字文档中 combobox的类型是string no converters,但是如果我使用converters将其更改为十进制,这似乎并不重要 逗号在瑞典是十进制分隔符 我使用@dbLookup获取关键字值 像这样的。 @DbLookupdb,vwlokupcat,奖金,关键字 当我保存文档时,关键字文档中的值被保存为numric值。但是组合框不再在编辑模式

我在Notes表单中有一个数字字段连接到xpage中的组合框。组合框中的值是十进制值(1,02、1,03等)的列表,但它们作为文本存储在关键字文档中

combobox的类型是string no converters,但是如果我使用converters将其更改为十进制,这似乎并不重要

逗号在瑞典是十进制分隔符

我使用@dbLookup获取关键字值

像这样的。 @DbLookupdb,vwlokupcat,奖金,关键字

当我保存文档时,关键字文档中的值被保存为numric值。但是组合框不再在编辑模式下显示正确的选定值,并且在我更改它时显示验证错误,因为该值现在是数字,而不是组合框关键字值中的文本。 或者因为该字段最初是文本字段,但保存时是数字字段

请注意,我没有在组合框上使用任何验证器 我无法将关键字字段类型更改为数字,因为这在许多其他地方都使用 如果没有帮助,请使用@Text@Text@DbLookupdb,vwLookupCat,奖金,关键字 我应该如何解决这个问题

提前谢谢

托马斯


我可以想出两种方法,这两种方法都要求你使用bean,希望你已经熟悉了这个概念

概念上的正义

转换器保持在原来的位置。毕竟你想处理一个数字,你是在保存一个数字。转换器指示框架将POST返回的字符串值转换为一个数字,这就是您想要的,因为与组件绑定的目标字段也保存为一个数字

问题在于将此类值与用于填充选项的值列表相匹配。为什么?这些值不是数字

解决方案是自定义构建选项,而不是让框架从dblookup返回的字符串值数组中执行自动装箱

写ssjs+公式让我很痛苦,但调用应该是这样的:

<xp:selectItems
    value="${javascript:myBeanName.getSelectItems(@DbLookup(db,"vwLookupCat","BONUS","KeyWord"))}">
</xp:selectItems>
我知道,我知道,整数让你觉得它会把值转换成整数。它不会,它会转换为Double。你真幸运!想象一下你需要一个整数

概念上糟糕的

另一种方法是将combobox绑定到视图范围的变量。
您可以在页面加载时使用字符串转换的文档值初始化变量,然后使用该值。在保存时,您将读取视图范围的变量,将其转换回数字,并在保存之前将数字推送到文档字段。

在富客户端选项组合中,对话框将仅为文本。它可以由另一个数字字段处理,该字段将文本选项字段转换为数值。所以非常接近@shillem的蹩脚变体,这是一个很好的开始,可以动态地将您的组合绑定到像Map这样的选项。
<xp:selectItems
    value="${javascript:myBeanName.getSelectItems(@DbLookup(db,"vwLookupCat","BONUS","KeyWord"))}">
</xp:selectItems>
public List<SelectItem> getSelectItems(String[] values) {
    List<SelectItem> options = new ArrayList<SelectItem>();

    for (String value : values) {
        options.add(new SelectItem(Double.valueOf(value), value));
    }

    return options;
}
    <xp:this.converter>
        <xp:convertNumber type="number" integerOnly="true" />
    </xp:this.converter>