我知道有几种解决方案可以禁用浏览器后退按钮,包括使用PhaseListener的beforePhase()方法。问题是它们都不适合我:( 我的JSF项目使用基本模板作为主页面。所有其他页面均由该模板组成。 我想在一个特定页面禁用后退按钮,比如说page_n.xhtml。 所以我发现的最简单的解决方案似乎使用了body-tag的onunload-attribute。 原则上文件看起来像这样:
所引用:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="Cache-Control" content="no-store, max-age=0, no-cache, must-revalidate"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
</head>
<body onunload="myfun()">
<f:view>
<h:form id="mainform">
<ui:insert name="content"/>
</h:form>
</f:view>
</body>
page_n.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<script language="JavaScript">
function myfun() {
window.history.forward();
}
</script>
<ui:composition template="template.xhtml">
<ui:define name="content">
<!-- content -->
</ui:define>
</ui:composition>
Afaik这应该给我我想要的东西,但它没有。实际上它什么也没做。如果我用alert('foo')替换window.history.forward(),我会在离开页面后看到弹出窗口。所以myfun()会在正确的时间执行。不知怎的,我认为这个问题与我项目的模板化布局有关。前向调用是否按预期工作,因为page_n.xhtml的内容被插入到template.xhtml中?
亲切的问候, 亚历