JSF和“禁用”后退按钮(又一次)

时间:2011-10-28 10:38:43

标签: jsf

我知道有几种解决方案可以禁用浏览器后退按钮,包括使用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中?

亲切的问候, 亚历

0 个答案:

没有答案