preRenderViewイベントは、OmniFaces Ajaxユーティリティのoncomplete()メソッドを呼び出して、クライアントでjavascriptを実行します。これをテストしたところ、javascriptがクライアントで実行されていません。
私のf:eventは以下の通りです。
<f:metadata>
<o:enableRestorableView/>
<f:event type="javax.faces.event.PreRenderViewEvent" listener="#{pageNavigationController.preRenderView()}"/>
</f:metadata>
私のpageNavigationController.preRenderView()は以下のとおりです。
public void preRenderView() {
if (initLayoutForPage) {
// initialize layout for page
layoutController.initializeForPage(page);
initLayoutForPage = false;
}
if (usersController != null) {
usersController.preRenderView();
}
}
以下のusersController.preReviewView()を呼び出し、Ajaxユーティリティのoncomplete()を呼び出します。
public void preRenderView() {
Ajax.oncomplete("document.getElementById('menuBarForm:btnLogout').click();");
}
現在本番環境では、上記のjavascriptは設計どおりに機能します。このJavaScriptは次のように呼び出されます。
<script>window.onbeforeunload = function() { document.getElementById('menuBarForm:btnLogout').click(); }</script>
では、なぜjavascriptがクライアントで実行されないのですか?
編集:元の問題の回避策を見つけたので、この機能はもう必要ありませんが、この質問への回答をいただければ幸いです。ありがとう。:)