背景:带有选项卡式表(来自容器控件)和多个数据源的 XPage,每个选项卡一个。如果用户刷新页面,我会遇到保存按钮创建重复项的问题。为了解决这个问题,我实现了 Tommy Valand 创建的这个解决方案。 http://dontpanic82.blogspot.com/2010/06/xpages-avoid-saving-duplicate-documents.html
问题是,当用户在第二个选项卡上并使用完全刷新保存文档时(由于附件,我必须这样做)。该功能很好用,除了...
问题:重定向总是将用户带到第一个选项卡。对于除第一个选项卡之外的每个选项卡,这显然都是一个问题。
我想知道一种将 URL 直接指向第二个选项卡的方法。我已经尝试修改 Tommy 的代码以包含一个哈希标签,但我无法让它工作。我什至不确定哈希标签是否适用于 xpages。在此先感谢您对此问题的帮助。
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})|(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)
if(tab == "Invoices") { redirectUrl += '#tabPanel1'; }
if(tab == "Credits") { redirectUrl += '#view:_id1:tabPanel2:editPanelCredits'; }
print(redirectUrl);
context.redirectToPage( redirectUrl );
} catch(e){ /* Exception logging */ }
}