私は RichFaces を使用しており、Web サイトにライブ検索を実装したいと考えています。入力フィールドと、バッキング Bean で動的に構築された div を取得しました。実際には、メソッド bean.getResultsDiv() が setResultsDiv() を呼び出し、searchString を考慮して MyFaces Div オブジェクトを作成します。残念ながら、入力フィールドに 1 つの文字を入力すると、results-div の再レンダリングが早すぎて、検索文字列が更新されません。char の処理が最初に行われ、次に新しい result-div を作成するための bean-method がトリガーされるようにするにはどうすればよいですか? 前もって感謝します。
<t:inputText id="mysearchString"
value="#{bean.searchString}"
onkeydown="jQuery('form_processSearchString').click();"
/>
<4j:commandButton id="processSearchString"
process="mysearchString"
reRender="results"
/>
<t:div id="results" binding="#{bean.resultsDiv}" />
UPDATE-1: デバッグしたところ、bean.searchString が正しく更新されていることがわかりました。残念ながら、getResultsDiv() の getter メソッドは、setSearchString(newStringToSeach) の前に呼び出されます。処理が最初に行われ、次に再レンダリングが行われるようにするにはどうすればよいですか。
私が遊んでいる別のコード スニペット (同じ動作、setSearchString() の前に rerendering-getter-call がトリガーされます):
<t:inputText id="searchString"
value="#{beans.searchString}"
onkeydown="if (event.keyCode == 13) { return false; }">
<a4j:support event="onkeyup" requestDelay="200" ajaxSingle="true"
reRender="resultsDiv" eventsQueue="quicksearchqueue"
ignoreDupResponses="true"
process="searchString"
/>
</t:inputText>
手伝ってくれてありがとう!
UPDATE-2: 対応するバインディングのゲッターがまったくトリガーされなかったため、div が更新される可能性がないことがわかりました。それが問題のようです!
<t:div id="results" binding="#{bean.resultsDiv}" />