0

知っている。私はこれをすべきではありません。しかし...

ADF Web アプリケーションでブラウザーの [戻る] ボタンを無効にする必要があります。jspx の初期化 JavaScript 関数でこのコードを試しました (main.jspx を呼び出すことができます):

window.history.forward(1);

戻るボタンは無効になっていませんが、メイン ページにアクセスした後にクリックすると (たとえば、メイン ページの次のページからメイン ページへ)、2 ページ目に戻ります。戻るボタンをまったく無効にします。出来ますか?特にADFアプリケーション(JavaScriptを使用せずに)について知っている場合は、答えを歓迎します。

ありがとう。

4

1 に答える 1

0

解決策は次のとおりです。

page1.jspx と page2.jspx の 2 つのページがあります。adfc-config.xml で制御フロー ケースを定義しました。

<?xml version="1.0" encoding="windows-1252" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
  <view id="page1">
    <page>/page1.jspx</page>
  </view>
  <view id="page2">
    <page>/page2.jspx</page>
  </view>
  <control-flow-rule id="__1">
    <from-activity-id>page1</from-activity-id>
    <control-flow-case id="__2">
      <from-outcome>navigate</from-outcome>
      <to-activity-id>page2</to-activity-id>
    </control-flow-case>
  </control-flow-rule>
</adfc-config>

action="navigate"で、1ページ目から2ページ目に移動します。

page1.jspx は次のようになります。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="Page 1" id="d1">
            <af:form id="f1">
                <af:panelStretchLayout id="psl1">
                    <f:facet name="center">
                        <af:commandLink action="navigate" id="cl1">
                            Navigate
                        </af:commandLink>
                    </f:facet>
                </af:panelStretchLayout>
                <af:resource type="javascript">
                    var registerDisableBackButton = function () {
                        disableBackButton();
                        window.onload = disableBackButton();
                        window.onpageshow = function (event) {
                            if (event.persisted) {
                                disableBackButton()
                            }
                        }
                        window.onunload = function () {
                            void (0);
                        }
                    }

                    var disableBackButton = function () {
                        window.history.forward();
                    }

                    var onLoadEvent = function(event) {
                        registerDisableBackButton();
                    }
                </af:resource>                
            </af:form>
            <af:clientListener method="onLoadEvent" type="load"/>
        </af:document>
    </f:view>
</jsp:root>

page2.jspx に移動した後、[戻る] ボタンをクリックすると、再びページ 2 にリダイレクトされます。

これが役立つことを願っています。

于 2012-04-25T18:41:58.310 に答える