我尝试制作自定义自动填充框,但我遇到了一些麻烦。现在我有一个在keydown上调用此函数的输入
function pingAutoComplete(event)
{
console.log("pingAutoComlete Called");
window.clearTimeout(window.keyTimeout);
//Wait 2 seconds before we attempt to pingAutoComplete incase user has not finished typing
window.keyTimeout = setTimeout(function() {
jsf.ajax.request(event, "keydown", {execute:'searchTerm',render:'autoCompletePanel'})
autoCompleteLayoutPanel.show();
return false;
}, 2000);
return false;
}
自动完成面板包含一系列看起来像这样的选择
<h:selectOneListbox id="vehicleResult" title="Vehicles"
value="#{searchBean.searchTerm}"
converter="entityConverter"
required="false"
rendered="#{!searchBean.filterAutoComplete().isEmpty()}">
<f:selectItems value="#{searchBean.filterAutoComplete()}"
var="searchItem" itemValue="#{searchItem}"
itemLabel="#{searchItem.displayString}"
itemLabelEscaped="true" />
</h:selectOneListbox>
现在,当调用javascript时,它似乎在后端点击了searchBean.filterAutoComplete(),但实际上并没有更新gui中的选择列表。谁知道为什么?
答案 0 :(得分:1)
您必须指定确切的客户端ID。这是生成的HTML元素的id
属性的值,而不是JSF组件本身的值。如果JSF组件放在<h:form>
中,则默认情况下客户端ID将以其ID开头。
因此以下小组
<h:form id="form">
<h:panelGroup id="autoCompletePanel">
的客户ID为form:autoCompletePanel
。您需要在render
属性中准确指定该ID。顺便说一句,同样的规则也适用于execute
。