struts2动作双重提交

struts2动作双重提交,struts2,Struts2,我有struts2动作法。它将从不同的服务器调用。i、 e.在我们的应用中,我们集成了icici支付网关。我的操作方法将从icici服务器调用。在这个方法中,我执行一些逻辑。根据逻辑,它将被重定向到其他操作 <action name="iciciResponse" class="com.yatrasoft.yatratravel.agent.b2c.PaymentGateWayAction" method="iciciResponse"> <result name="buybu

我有struts2动作法。它将从不同的服务器调用。i、 e.在我们的应用中,我们集成了icici支付网关。我的操作方法将从icici服务器调用。在这个方法中,我执行一些逻辑。根据逻辑,它将被重定向到其他操作

<action name="iciciResponse" class="com.yatrasoft.yatratravel.agent.b2c.PaymentGateWayAction" method="iciciResponse">
<result name="buybusTicket" type="redirect">/tentativeBusbooking.action?searchKey=${getSearchKey()}</result>
</action>
但问题是,如果用户刷新浏览器,tentiveBusBooking()将再次执行

如果我有JSP页面,通过使用s:token我们可以避免双重表单提交。但是我的操作直接从另一台服务器调用。那么,在这种情况下如何避免双重提交呢


如果我需要写我自己的逻辑,你能帮我吗。我是实习s/w工程师(仅5个月的工作经验).

一般来说,不建议在付款捕获时以最标准的方式刷新页面,在大多数情况下,付款网关往往会警告用户不要双击。刷新浏览器,因为它将使付款无效

在几乎所有这样的情况下,交易总是以无效模式结束。更多关于处理这样的用例,更多的是支付网关的责任,而不是您的应用程序的责任


如果ICICI payseal integration doc有没有处理双重提交问题的机制,我建议您查看一下该文档?

我的建议是在TentiveBusBooking()之后执行重定向操作。在这个场景中,您将返回一个结果,例如“bookingComplete”,结果类型为redirectAction,而不是返回SUCCESS

结果将是一个只显示jsp,如果刷新页面,则只显示结果,而不是原始提交

例如:

@Results({
@Result(name = "success", location = "/WEB-INF/content/tentativeBusbooking.jsp"),
@Result(name = "bookingComplete", type="redirectAction" location = "booking")})
public class BoxController extends ActionSupport{

    public void execute(){
        return SUCCESS;
    }

    public void tentativeBusbooking(){
        //Do stuff...
        return "bookingComplete";
    }

在上面带注释的示例中,bookingComplete结果将在TentiveBusBooking()再次调用execute()而不是TentiveBusBooking()后,结果类型将把操作重定向回自身

我们正在整合近10个支付网关。这里我说的是ICICI。我们必须在所有支付网关中处理上述情况。这不是ICICI的问题。这是我们的申请问题。因为我们正在根据我的应用程序逻辑重定向到其他操作。。我们需要根据逻辑重定向到4个以上的结果。这里我只展示了tentiveBusBookIG()。实际上,我们有4个结果。你需要发送类似的令牌来检查重复的请求。我不知道在哪里添加。如果你不清楚我的解释,我的意思是说你需要模仿和它的拦截器创建的相同的流,因为你不能使用,所以你需要对你的流有相同的功能。我是实习s/w工程师(只有5个月的经验)。在这方面你能帮我吗。
@Results({
@Result(name = "success", location = "/WEB-INF/content/tentativeBusbooking.jsp"),
@Result(name = "bookingComplete", type="redirectAction" location = "booking")})
public class BoxController extends ActionSupport{

    public void execute(){
        return SUCCESS;
    }

    public void tentativeBusbooking(){
        //Do stuff...
        return "bookingComplete";
    }