1

我正在尝试制作一个自定义的自动完成框,但我遇到了一些麻烦。现在我有一个在 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 中的选择列表。有谁知道为什么?

4

1 回答 1

1

您必须指定准确的客户端 ID。那是id生成的 HTML 元素的属性值,而不是 JSF 组件本身的值。如果 JSF 组件放置在 中<h:form>,则默认情况下客户端 ID 将附加其 ID。

因此下面的面板组

<h:form id="form">
    <h:panelGroup id="autoCompletePanel">

将有一个客户端 ID form:autoCompletePanel。您需要在render属性中准确指定该 ID。顺便说一句,同样的规则也适用execute

于 2012-06-06T14:31:21.707 回答