簡體   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