繁体   English   中英

使用JSF的条纹结帐费用:两次提交表单

[英]Stripe Checkout Charge using JSF: Form being submitted twice

该表单被提交了两次:1.页面加载2.当用户单击Checkout的按钮时

我想避免第一次提交,因为返回的令牌为null,所以会引发错误:com.stripe.exception.InvalidRequestException:无效的源对象:必须是字典或非空字符串。 请参阅https://stripe.com/docs上的API文档; 要求编号:req_DjRbT4rGULYGnB

在文档之后,我将以下代码添加到XHTML中:

<div>
<form submit="#{studentBean.chargeStudent()}" method="POST">
                <script
                    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key="pk_test_xxxxxx"
                    data-amount="111"
                    data-name="myApp"
                    data-description="Example charge"
                    data-zip-code="true"
                    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                    data-locale="auto">
                </script>
            </form>
</div>

这是我的Managed Bean的功能:

@Named
@ViewScoped
public class StudentBean implements Serializable {

@EJB
StripeChargeLogic stripeChargeLogic;

public void chargeStudent(){
    Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    logger.info("charge:" + requestParams.get("stripeToken"));

    stripeChargeLogic.chargeStudent(requestParams.get("stripeToken"));
}
}

有人可以指导我为什么要两次提交表单以及在页面加载期间如何防止提交吗?谢谢!

您不是在这里执行jsf,而是在xhtml / facelets文件中(而不是JSF)中有普通的html(很可能从您的帖子中清除了)。

在表单操作中,您有一个EL,由于它与jsf无关,因此在页面加载时会被调用,就像这里发生的情况一样

因此,其余的行为甚至更加“不确定”。 退后一步,学习Web技术和jsf的基础知识,然后再次查看您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM