1

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がクライアントで実行されないのですか?

編集:元の問題の回避策を見つけたので、この機能はもう必要ありませんが、この質問への回答をいただければ幸いです。ありがとう。:)

4

1 に答える 1

1

preRenderViewイベント中/経由で実行された場合でも、Ajax.oncomplete()が設計どおりに機能することを確認しました。OmniFacesの「Ajax」ユーティリティは「Ajax」リクエスト用です。私は、OmniFaces Ajax.oncomplete()がFPR(フルページ更新または非AJAX要求)のpreRenderView中にJavaScriptをクライアントに送信することを想定していました。

于 2012-12-12T18:38:20.363 に答える