xe:djextListTextBox 控件为具有类似 aliases/synonyms 的字段显示错误值

xe:djextListTextBox control displays wrong value for fields with similar aliases/synonyms

我最近发现 xe:djextListTextBox 控件使用 xe:valuePicker 来处理具有 synonyms/aliases 的值时存在问题。如果绑定到不同字段的选择器之间的同义词相似,当 select 输入第一个字段的值时,select 输入第二个字段的匹配值会显示第一个 [=27] 中的文本=]ion.

例如,选择器 #1 有 3 个值 aliases/synonyms:蓝色|1、绿色|2、黄色|3。 Picker # 2 有 3 个不同的值但同义词相同:red|1, orange|2, purple|3.

如果我 select 选择器 #1 显示“蓝色”,它会显示“蓝色”。然后,当我 select 选择器 #2 显示“红色”时,它显示的不是“红色”,而是“蓝色”。

好消息是,当保存文档(正确保存同义词)并以读取模式重新打开时,这两个字段会正确显示正确的值。问题似乎是在编辑模式下。有没有人以前遇到过这个问题并知道修复方法?

这里是测试代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.data>
        <xp:dominoDocument var="doc1" />
    </xp:this.data>

    <p>
        k1
        <xe:valuePicker for="k1" pickerText="add">
            <xe:this.dataProvider>
                <xe:simpleValuePicker valueList="blue|1;green|2;yellow|3" labelSeparator="|" valueListSeparator=";" />
            </xe:this.dataProvider>
        </xe:valuePicker>
    </p>
    <p>
        <xe:djextListTextBox id="k1" value="#{doc1.k1}"
            displayLabel="true" multipleSeparator=";" multipleTrim="true" />
    </p>

    <p>
        k2
        <xe:valuePicker for="k2" pickerText="add">
            <xe:this.dataProvider>
                <xe:simpleValuePicker valueList="red|1;orange|2;purple|3" labelSeparator="|" valueListSeparator=";" />
            </xe:this.dataProvider>
        </xe:valuePicker>
    </p>
    <p>
        <xe:djextListTextBox id="k2" value="#{doc1.k2}"
            displayLabel="true" multipleSeparator=";" multipleTrim="true" />
    </p>
</xp:view>

我最终用 HCL 开了一张票,他们建议的解决方法是向 djextListTextBox 添加一个 onChange 事件以刷新它的值。我对它并不满意,因为我有很多领域,而且它会影响性能,但它确实有效。

<xp:div id="refreshTarget">
    ...
    <p>
        <xe:djextListTextBox id="k1" value="#{doc1.k1}" style="font-size:smaller"
            displayLabel="true" multipleSeparator=";" multipleTrim="true">
            <xp:eventHandler event="onChange" submit="true" refreshMode="partial"
                refreshId="refreshTarget" />
        </xe:djextListTextBox>
    </p>
</xp:div>