java - 使用 JSF 的 Stripe Checkout Charge:表单提交两次
问题描述
表单被提交两次: 1. 在页面加载 2. 当用户点击 Checkout 的按钮时
我想避免第一次提交,它会抛出错误,因为返回的令牌为空:com.stripe.exception.InvalidRequestException:无效的源对象:必须是字典或非空字符串。请参阅https://stripe.com/docs上的API 文档;请求 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 没有任何关系,所以在页面加载时被调用,有点像这里发生的事情
因此,其余的行为甚至更加“未定义”。退后一步,学习web技术和jsf的基础知识,然后再看你的问题
推荐阅读
- out-of-memory - 启动 minishift 或占用大量内存时,启动 OpenShift 集群永远不会结束
- ionic-framework - 使默认离子警报更大
- php - 带有循环的分页后
- python - 用前几天的数据填充数据框中的漏洞
- android - 有海拔时如何在 ImageButton 上方添加图像
- java - 发生错误时的PostgreSQL JDBC驱动回滚批量查询
- sql-server - 从 SQL Server 中的给定日期返回 4 小时减去日期的函数
- php - output_buffering 与 ob_start 有什么区别?
- node.js - 使用 npm install -g sass 安装 Sass 时出错
- php - 创建 CSV 编码不正确?