0

My XPage はデフォルトで新しいドキュメントを作成し、検証に合格すると新しいページにリダイレクトします。

ユーザーがページを送信し、一部のフィールドが検証に失敗した場合、期待どおりメッセージ コントロールにエラー メッセージが表示されます。ユーザーがエラーを修正し、ページが検証に合格すると、期待どおりに ThankYou.xsp ページにリダイレクトされます。

ただし、ブラウザの [戻る] ボタンを押すと、XPage に戻り、検証エラーが再び表示されます。

この動作を回避し、代わりに、正常に送信されたときに XPage をリセットして、[戻る] が押された場合に新しいページが表示されるようにする方法はありますか?

これが送信ボタンの設定です...

<xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true" id="eventHandler1">

ナビゲーション...

<xp:this.navigationRules> <xp:navigationRule outcome="xsp-success" viewId="/ThankYou.xsp"> </xp:navigationRule> </xp:this.navigationRules>

4

1 に答える 1

2

同様の問題がありました。私の場合、ユーザーがページを更新するとドキュメントが複製されました。関数を使用して現在のページにリダイレクトすることで、これを解決できました。Tommy Valand はもともとこれを書きました :

タブ付きテーブルの現在のタブにリダイレクトするように変更しました。それらを使用していない場合は、機能から削除してください。ThankYou ページにリダイレクトする前にこの機能を使用すると、[戻る] ボタンに検証エラーが表示されなくなります。おそらく、検証済みのドキュメントが表示されるだけです。

この関数を SSJS コード ライブラリに含めることができます。新しいドキュメントを保存した後、関数を呼び出します。これが私がそれを呼び出す方法です:

 redirectToCurrentDocument( false, "Invoices" )    

Invoices は、リダイレクト先のタブの名前です。

 function redirectToCurrentDocument( switchMode:boolean, tab){
  try {
    if( typeof currentDocument === 'undefined' || viewScope.stopRedirect ){ return;     }
    // Gets the name of the XPage. E.g. /Person.xsp
    var page = view.getPageName();

    // Finds extra parameters, strips away XPages parameters/trims leading &
    var parameters = context.getUrl().getQueryString().substring(1);
    var extraParameters = parameters.replace( 
     /([&\?^]*_[a-z0-9=]+[&]{0,1})|(tab=\w{0,}[\&]{0,1})|(action=\w{4}Document[\&]{0,1})|(documentId=[\w]{32}[\&]{0,1})/ig, '').replace( /\&$/, '' );

    // Gets the unid of the current document
    //var unid = currentDocument.getDocument().getUniversalID();
    //var unid = document1.getDocument().getUniversalID();  //changed this line to make work with multiple data sources - SJZ
    var unid = document1.getDocument().getNoteID();  //also changed to use NoteID since it gave runtime errors for new documents - SJZ

    // Sets/changes the action according according to the mode the document is in
    var isEditable = currentDocument.isEditable();
    if( switchMode ){ isEditable = !isEditable; } // false -> true / true -> false

    var action = ( isEditable ) ? 'editDocument' : 'openDocument';

    // Open the current document via a get request
    var redirectUrl = page + '?documentId=' + unid + '&action=' + action;

    if( extraParameters ){ redirectUrl += '&' + extraParameters; }

    //print("tab=" + tab)
    redirectUrl += '&tab=' + tab

    context.redirectToPage( redirectUrl );
  } catch(e){ /* Exception logging */ }
}

それがあなたを助けることを願っています。それは私にとってとてもうまくいきます。

于 2013-03-06T23:10:14.393 に答える