My preRenderView event invokes OmniFaces Ajax utility's oncomplete() method to execute javascript on the client. I just tested this, and the javascript is not executed on the client.
My f:event is below.
<f:metadata>
<o:enableRestorableView/>
<f:event type="javax.faces.event.PreRenderViewEvent" listener="#{pageNavigationController.preRenderView()}"/>
</f:metadata>
My pageNavigationController.preRenderView() is below,
public void preRenderView() {
if (initLayoutForPage) {
// initialize layout for page
layoutController.initializeForPage(page);
initLayoutForPage = false;
}
if (usersController != null) {
usersController.preRenderView();
}
}
which calls usersController.preReviewView() below, which invokes Ajax utility's oncomplete().
public void preRenderView() {
Ajax.oncomplete("document.getElementById('menuBarForm:btnLogout').click();");
}
Currently in production, the javascript above works as designed; this javascript is called as follows.
<script>window.onbeforeunload = function() { document.getElementById('menuBarForm:btnLogout').click(); }</script>
So, why is the javascript not being executed on the client?
EDIT: I no longer need this functionality as I just figured out a workaround for the original problem, but I would appreciate an answer to this question. Thanks. :)