onclick イベント内で context.redirectToPage() を呼び出す、異なるカスタム コントロールに 2 つのボタンがあります。ある例では、これにより、期待される URL への HTTP リダイレクト (HTTP ステータス 302) が発生します (つまり、ヘッダー 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、immediate=true があります。どちらにも、正しく実行されるクライアント側スクリプトと、リダイレクト呼び出しの前に実行される数行の SSJS があります。これを引き起こしている可能性があると私が考えることができる唯一の違いは、スクリプトを返すボタンが (xe:dialog) 内にあることです。
私たちのドミノ サーバーはリバース プロキシの背後にあるため、これが私にとってなぜ問題なのか、あなたの抜け目のない人は気付くでしょう。普通の人は Domino に直接アクセスできないため、script タグで生成された URL は機能しません。
2 番目のボタンから 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>