jsf.ajax.request完全没有工作

时间:2012-06-06 14:03:40

标签: javascript jsf

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

1 个答案:

答案 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

相关问题