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

我刚刚确认 Ajax.oncomplete() 即使在 preRenderView 事件期间/通过 preRenderView 事件执行时也能按设计工作。OmniFaces 'Ajax' 实用程序用于'Ajax' 请求。我假设 OmniFaces Ajax.oncomplete() 会在 FPR(整页刷新或非 AJAX 请求)的 preRenderView 期间向客户端发送 javascript。

于 2012-12-12T18:38:20.363 回答