У меня есть две кнопки в разных пользовательских элементах управления, которые в своих событиях onclick вызывают context.redirectToPage(). В одном случае это вызывает перенаправление HTTP (состояние HTTP 302) на ожидаемый URL-адрес (т. е. заголовок Location = http://frontend.company.com/path/to/file.nsf/myXpages.xsp).?documentId=C699C5D6E81721EA85257A2F00683319&openDocument). В другом случае он возвращает такой тег:
<script>window.location.href='http://backend.company.com:81/path/to/file.nsf/myXpage.xsp?documentId=C699C5D6E81721EA85257A2F00683319&openDocument'</script>
Оба экземпляра имеют submit=true, Refresh=complete и немедленное=true. У обоих есть сценарии на стороне клиента, которые выполняются правильно, и несколько строк SSJS, которые выполняются до вызова перенаправления. Единственное различие, которое, как я понимаю, может быть причиной этого, заключается в том, что кнопка, которая возвращает скрипт, находится внутри (xe:dialog).
Проницательные из вас заметят, почему это проблема для меня, поскольку наш сервер Domino находится за обратным прокси-сервером. Простые смертные не имеют прямого доступа к Domino, поэтому URL-адрес, сгенерированный в теге скрипта, работать не будет.
Есть ли у кого-нибудь идеи о том, как получить предпочтительное поведение перенаправления 302 со второй кнопки или даже способ заставить его использовать правильный URL-адрес? Или даже пролить свет на то, почему поведение будет другим?
Спасибо,
Богатый
РЕДАКТИРОВАТЬ: код для кнопки, которая генерирует тег скрипта для context.redirect():
<xp:button
id="errorReloadButton"
value="Reload Page">
<xp:this.rendered><![CDATA[#{javascript:whichButton == "reload"}]]></xp:this.rendered>
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
immediate="true">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><! [CDATA[#{javascript:sessionScope.remove("errors");
var c = getComponent("errorDialog")
c.hide();
var redirectTarget = view.getPageName() + '?documentId=' + compositeData.docID + '&openDocument';
context.redirectToPage(redirectTarget,true);
}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[setClean("#{javascript:compositeData.docID}");
XSP._setDirty(false,"");]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>
РЕДАКТИРОВАТЬ 2: источник для кнопки, которая правильно вызывает перенаправление 302:
<xp:button
id="cancelButton"
value="Cancel"
rendered="#{javascript:compositeData.documentDataSource.isEditable()}">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
onError="handleError(arguments[0],arguments[1])"
immediate="true">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var xdoc:NotesXspDocument = compositeData.documentDataSource;
if(xdoc.isNewNote()){
return;
}
var doc:NotesDocument = xdoc.getDocument(false);
/* more code here, not relevant to this */
var docid = doc.getUniversalID();
context.redirectToPage(view.getPageName() + '?documentId=' + docid + '&openDocument')}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[setClean("#{javascript:docId(compositeData.documentDataSource)}");
if(#{javascript:compositeData.documentDataSource.isNewNote()}){
popPageStack();
return false;
}]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>