除非先触发 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">
因此,完全刷新打破了我的输入提示,部分刷新修复了它们。
底部已更新...
我有一个自定义控件,其中包含启用了 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">
因此,完全刷新打破了我的输入提示,部分刷新修复了它们。