我的 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 没有在客户端上执行呢?
编辑:我不再需要这个功能,因为我只是想出了一个解决原始问题的方法,但我希望能回答这个问题。谢谢。:)