Имам два бутона в различни персонализирани контроли, които в рамките на техните събития onclick извикват context.redirectToPage(). В един случай това причинява HTTP пренасочване (статус на HTTP 302) към очаквания URL (т.е. местоположение на заглавката = 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 и immediate=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>