java - 在 POST 到外部 URL 之前执行一些 JSF 业务逻辑

标签 java jsf url post jsf-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>

最佳答案

您可以使用 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>

关于java - 在 POST 到外部 URL 之前执行一些 JSF 业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14055891/

相关文章:

java - 当某些 url 加载时是否可以执行某些操作?

java - Websphere Portal portlet 不会在异常后失败并在重新加载时重新触发所有事件

jsf - 如何在JSF框架中实现JAX-RS RESTful服务

php - 内容管理系统 : How to handle internal URLs best?

java - 抽象接口(interface)

java - 内联图像与临时文件(Java XHTML->PDF 生成)

java - java 重载的奇怪行为

java - JSF2.0 在托管 bean 之间传递值对象

php - PHP正则表达式用于不同的URL

Javascript - 获取没有页码的当前页面URL