Visualforce間でPOSTパラメータを渡す方法

salesforce

経緯

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指定できるようにならないかな。。。
より良い方法がありましたら教えてください!