完成后可以初始化提交的XPage,因此“后退”按钮显示一个干净的页面

时间:2013-03-06 22:41:38

标签: xpages

我的XPage默认创建一个新文档,并在通过验证时重定向到新页面。

如果用户提交页面并且某些字段未通过验证,则错误消息将按预期显示在消息控件中。如果用户更正错误并且页面然后通过验证,则会按预期重定向到ThankYou.xsp页面。

然而,如果他们按下浏览器后退按钮,他们将返回XPage并再次看到验证错误。

是否有一种方法可以避免此行为,而是在成功提交时重置XPage,以便在按下Back时显示新页面?

以下是“提交”按钮设置...

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

导航......

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

1 个答案:

答案 0 :(得分:2)

我遇到过类似的问题。就我而言,如果用户刷新页面,它会复制文档。我能够通过使用函数重定向到当前页面来解决这个问题。 Tommy Valand最初写道:http://dontpanic82.blogspot.com/2010/06/xpages-avoid-saving-duplicate-documents.html

我修改了它以重定向到选项卡表的当前选项卡。如果您不使用它们,请从功能中删除它。我相信你的情况,如果你在重定向到ThankYou页面之前使用这个功能,那么后退按钮将不会显示验证错误。它可能只显示经过验证的文档。

您需要在SSJS代码库中包含此函数。保存新文档后调用该函数。我就是这样称呼的:

 redirectToCurrentDocument( false, "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 */ }
}

希望能帮到你。它对我很有用。