経緯
Visualforceの画面遷移時にGET(URL)パラメータを使用しないでパラメータを渡す方法を調べたが記載が少ないため、Visualforce間の画面遷移/新規ウィンドウ表示/新規タブ表示時にPOSTパラメータを渡す方法を備忘録として記載。
※セッションは使用していません。
Visualforce画面遷移
Visualforce側の<apex:form>
で値をsubmitしてしまうとGETパラメータで値が渡ってしまうため、コントローラ(ApexClass)側のPagereference
でパラメータを設定する必要がある。
渡す側
// 渡す側のコントローラ
public Pagereference nextPage() {
// パラメータ設定
Pagereference pf = Page.Page2;
pf.getParameters().put([パラメータKey], [パラメータValue]);
return nextPage;
}
受け側
// 受け側のコントローラ
public void getParam () {
// パラメータ受け取り
String paramValue = System.currentPageReference().getParameters().get([パラメータKey]);
}
新規ウィンドウ表示
Visualforceページを新規ウィンドウで表示&POSTパラメータで値を渡す方法について、前述に記載したとおりVisualforce側の<apex:form>
で値を設定してしまうとGETパラメータで値が渡ってしまうため、<form>
でmethodにPOST指定しなければならない。もっと良いやり方があったら教えてほしい。。
受け取り側は通常の画面遷移時と同じ
渡す側
<script>
function openNewWindow() {
let option = 'location=no, toolbar=no, resizallbars=yes, scrollbars=yes';
window.open('', 'new_window', option);
document.form1.action = '/apex/Page2';
document.form1.method = 'POST';
document.form1.target = 'new_window';
document.form1.submit();
}
</script>
<form name="form1">
<input type="hidden" name="param1" value="{!parameter1}" />
</form>
<button onclick="openNewWindow()">ボタン</button>
受け側
public void getParam () {
// パラメータ受け取り
String paramValue = System.currentPageReference().getParameters().get('param1');
}
新規タブ表示
新規ウィンドウと受け渡しはほぼ一緒でwindow.openでOption指定しなければ新規タブとして表示される。
渡す側
<script>
function openNewWindow() {
window.open('', 'new_tab');
document.form1.action = '/apex/Page2';
document.form1.method = 'POST';
document.form1.target = 'new_tab';
document.form1.submit();
}
</script>
<form name="form1">
<input type="hidden" name="param1" value="{!parameter1}" />
</form>
<button onclick="openNewWindow()">ボタン</button>
受け側
public void getParam () {
// パラメータ受け取り
String paramValue = System.currentPageReference().getParameters().get('param1');
}
あとがき
<apex:form>
でPOST指定できるようにならないかな。。。
より良い方法がありましたら教えてください!