1

カスタムのオートコンプリート ボックスを作成しようとしていますが、問題が発生しています。現在、キーダウン時にこの関数を呼び出す入力があります

 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 に答える