Ajax で検索を呼び出すためのリンクを含む jsf ページがあります。リンクはjavascriptで自動クリックされます。フォームは、liferay のポートレットのいくつかのインスタンスにあります。通常、すべて正常に動作しますが、リスナーが呼び出されないことがあります。
ポートレットで (最初の編集で欠落していたバインディング属性を追加しました):
<h:form id="result">
...
<h:commandLink id="launch" binding="#{resultBackingBean.launchSearch}">
<f:ajax event="click" render="errors content debug" listener="#{resultBackingBean.doSearch}" />
</h:commandLink>
...
</h:form>
それが機能すると、次のトレースが表示されます。
12:55:10,476 DEBUG AFTER phaseId=[RESTORE_VIEW 1] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG BEFORE phaseId=[APPLY_REQUEST_VALUES 2] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG AFTER phaseId=[APPLY_REQUEST_VALUES 2] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG BEFORE phaseId=[PROCESS_VALIDATIONS 3] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG AFTER phaseId=[PROCESS_VALIDATIONS 3] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[UPDATE_MODEL_VALUES 4] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG AFTER phaseId=[UPDATE_MODEL_VALUES 4] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[INVOKE_APPLICATION 5] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG doSearch called
12:55:10,486 DEBUG AFTER phaseId=[INVOKE_APPLICATION 5] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[RENDER_RESPONSE 6] viewId=[/views/search_result.xhtml]
12:55:10,496 DEBUG AFTER phaseId=[RENDER_RESPONSE 6] viewId=[/views/search_result.xhtml]
自分のデバッグ トレースdoSearch が呼び出されていることがわかります。しかし、ページのリロード後にトレースが表示されず、リスナーが呼び出されないことがあります。私は常にDetected Ajax ResourceRequestトレースを持っていますが、BEFORE INVOKE_APPLICATION と AFTER INVOKE_APPLICATION の間には何もありません。
ページを再び機能させたい場合は、ページをリロードする必要があります。ページがリロードされた後にのみ動作が変化する可能性があるため、ロード中に何か問題が発生することがあったかのように。
doSearch を使用して Bean のスコープを変更しようとしました (viewScope から sessionScope へ)、f:ajax に immediate="true" を設定しようとしました。わからない...なぜ?:(
編集:
詳細については、findbugs を使用すると、ajax リクエストが表示されます。機能するケースでは、レンダリングするフィールドの更新があり、機能しないケースでは、ほとんど空の部分応答があります。
<partial-response>
<changes>
<update id="javax.faces.ViewState">6791417547372597471:4319149946307207422</update>
</changes>
</partial-response>