gpt4 book ai didi

java - 使用 JSF 进行 Stripe Checkout 收费 : Form being submitted twice

转载 作者:行者123 更新时间:2023-11-30 02:05:26 26 4
gpt4 key购买 nike

表单已提交两次:1. 页面加载2. 当用户点击结帐按钮时

我想避免第一次提交,它会抛出错误,因为返回的 token 为空:com.stripe.exception.InvalidRequestException:无效的源对象:必须是字典或非空字符串。请参阅 API 文档 https://stripe.com/docs ';请求 ID: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>

这是我的托管 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,你有纯html,很可能(但从你的帖子中不清楚)在xhtml/facelets文件中,但不是JSF。

在您的表单操作中,您有一个 EL,因为它与 jsf 没有任何关系,所以在页面加载时调用,有点像 here 发生的情况。

因此,其余行为更加“未定义”。退后一步,学习一下 Web 技术和 jsf 的基础知识,然后再看看你的问题

关于java - 使用 JSF 进行 Stripe Checkout 收费 : Form being submitted twice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51526799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com