除非先触发 onChange,否则对话框中的 Xpages typeahead 不起作用

Xpages typeahead in dialog does not work unless onChange triggered first

底部已更新...

我有一个自定义控件,其中包含启用了 typeAhead 的输入字段:

<xp:inputText id="UTAN1" value="#{document1.UTAN}"
    maxlength="5" styleClass="dbListFieldData" style="width:60px;font-size:13px;">
    <xp:typeAhead mode="full" minChars="2">
        <xp:this.valueList><![CDATA[#{javascript:var key = getComponent("UTAN1").getValue();
var path = new Array("","utans.nsf")
@Unique(@DbLookup(path,"(UTAN Lookup)",key,1,"[PARTIALMATCH]"));}]]></xp:this.valueList>
    </xp:typeAhead>
    <xp:eventHandler event="onchange" submit="true"
        refreshMode="partial" refreshId="utanPanel1">
        <xp:this.action>
            <!-- DO SOME STUFF -->  
        </xp:this.action>
    </xp:eventHandler>
</xp:inputText>

如果我在 xpage 上使用内联控件,typeAhead 工作正常。

但是,如果我在对话框中插入控件并调用它打开:

<xp:link escape="true" id="link3" styleClass="dbListFieldData" >
    <xp:eventHandler event="onclick" submit="false" id="eventHandler3">
        <xp:this.script><![CDATA[XSP.openDialog('#{id:miniDialogUTAN1}');]]></xp:this.script>
    </xp:eventHandler>
    <xp:image id="image2" url="/edit2.png" style="height:16px;width:16px;" alt="Edit UTAN"></xp:image>
</xp:link>

typeAhead 似乎部分残缺。

唯一能让 typeAhead 工作的方法是更改​​值并按 Enter。基本上,触发一个 onChange。之后,所有 typeAhead 字段开始工作。

关于如何纠正此行为的任何想法?仅供参考,我是 xpages 菜鸟,所以请放轻松。

2021 年 6 月 29 日更新:

我仍然迫切需要这方面的帮助。我一直在研究 Firebug 并发现了一些有趣的东西。

在普通 Xpage 表单的预输入中(预输入工作的地方),每次输入每个字符都会调用 POST。但是,当在对话框中提前输入时,输入字符会调用 GET。如果我在字段外按 Enter 键或 Tab 键(触发 onChange),我会得到一个 POST,然后单击返回字段并输入,它会再次开始使用 GET 并提取有效建议 只要 我不退格并键入不同的内容。然后这些建议就消失了。这是意料之中的,因为 GET 被缓存而 POSTs 没有。

那么对话框中的提前输入是怎么回事,使它们使用 GET,我如何强制它在每次按键时使用 POST?

致未来的人们...

经过数周的烦恼并最终放弃,我偶然发现了解决方案。

我的对话框以阅读模式打开。我在顶部和底部都有一个编辑按钮和一个取消按钮,它们最初是在对话框自定义控件的两个位置进行硬编码的。后来我去清理一些东西并决定为两组按钮创建一个自定义控件。一旦我这样做了,输入提示突然起作用了!

事实证明,当我将 XML 从(假设)重复的按钮面板复制并粘贴到新的自定义控件时,我是从底部按钮面板(我在测试时很少使用)复制的.

当我比较顶部和底部编辑按钮的 XML 时,我发现顶部的按钮在 onClick 中具有以下属性:

<xp:eventHandler event="onclick" submit="true" refreshMode="complete">

而最后一个有:

<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dialogOuterPanel1">

因此,完全刷新打破了我的输入提示,部分刷新修复了它们。