为什么OmniFaces Ajax实用程序的oncomplete()在preRenderView事件调用时不起作用?

时间:2012-12-12 06:37:33

标签: ajax jsf omnifaces

我的preRenderView事件调用OmniFaces Ajax实用程序的oncomplete()方法在客户端上执行javascript。我刚测试了这个,并且javascript没有在客户端上执行。

我的f:事件在下面。

<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没有在客户端上执行?

编辑:我不再需要这个功能,因为我刚刚找到原始问题的解决方法,但我希望得到这个问题的答案。谢谢。 :)

1 个答案:

答案 0 :(得分:1)

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