2

JSF ページに、外部のクレジット カード プロセッサに投稿する次のフォームがあります。ビジネス ロジックを記述できるように、代わりに JSF アクション メソッドを使用したいと考えています。アクション メソッドから投稿して、以下のフィールドを含めるにはどうすればよいですか?

        <form action="#{checkoutBean.sagepayURL}" method="post"
            id="SagePayForm" name="SagePayForm">

            <input type="hidden" name="VPSProtocol"
                value="#{checkoutBean.sagepayMessage.vpsProtocol}" /> <input
                type="hidden" name="TxType"
                value="#{checkoutBean.sagepayMessage.transactionType}" /> <input
                type="hidden" name="Vendor"
                value="#{checkoutBean.sagepayMessage.vendor}" /> <input
                type="hidden" name="Crypt" class="crypt"
                value="#{checkoutBean.sagepayMessage.crypt}" /> <input
                type="submit" 
                value="Proceed to Checkout" />

        </form>
4

1 に答える 1

2

JavaScript を使用して非表示の JSF ajax フォームを送信すると、支払いフォームを送信するスクリプトがレンダリングされます。

<form action="#{checkoutBean.sagepayURL}" method="post"
    id="SagePayForm" name="SagePayForm">
    ...
    <input type="button" value="Proceed to Checkout" 
        onclick="document.getElementById('hiddenForm:link').click()" />
</form>

<h:form id="hiddenForm" style="display:none">
    <h:commandLink id="link" action="#{checkoutBean.preprocess}">
        <f:ajax render="@form" />
    </h:commandLink>
    <h:outputScript rendered="#{checkoutBean.preprocessed}">
        document.getElementById("SagePayForm").submit();
    </h:outputScript>
</h:form>

private boolean preprocessed; // +getter

public void preprocess() {
    // ...

    preprocessed = true;
}

質問履歴に基づいて、OmniFacesを使用しているようです。その場合<o:commandScript>、次のように単純化することもできます。

<form action="#{checkoutBean.sagepayURL}" method="post"
    id="SagePayForm" name="SagePayForm">
    ...
    <input type="button" value="Proceed to Checkout" onclick="preprocess()" />
</form>

<h:form>
    <o:commandScript name="preprocess" action="#{checkoutBean.preprocess}"
        oncomplete="document.getElementById('SagePayForm').submit()" />
</h:form>
于 2012-12-28T11:36:31.633 に答える