【问题标题】:prevent multiple submit in spring webflow防止在spring webflow中多次提交
【发布时间】:2013-03-05 13:33:39
【问题描述】:

我们正在使用 webflow,因为我们在提交之前要填写多个表单。在用户提交所有数据库事务时发生的最后一页。所以我希望用户防止多次提交。有没有办法让 webflow 本身优雅地处理这个。优雅地说,我的意思是它应该重定向或将用户保持在同一页面上,这应该在内部防止多次提交的任何操作。请注意,我们不能使用 javascript。

【问题讨论】:

    标签: spring spring-webflow-2


    【解决方案1】:

    如果有一些内置机制来处理这种模式,那就太好了。与此同时,我们在“action”类中使用synchronized 块、mutex 和一些流范围对象或属性来执行此操作。例如:

    Object mutex = WebUtils.getSessionMutex(
            ((HttpServletRequest) context.getExternalContext().getNativeRequest()).getSession());
    
    synchronized (mutex) {
    
        if (!model.isComplete()) {
            // complete transaction
            model.setComplete(true);
        }
     }
    
     // return correct transition
    

    【讨论】:

    • 我们如何在 webflow 中获取模型?我从 *-flow.xml 调用的方法类似于 updateXXYY(RequestContext requestContext)。
    • 目前,我通过在需要阻止提交的 jsp 上使用标签库在会话中创建令牌来阻止多次提交。从会话中删除一个第一个提交令牌并完成事务,并且在删除令牌时忽略其他后续提交。
    【解决方案2】:

    你可以用 javascript 来做:

        <html>
        <head>
        <script language="JavaScript" type="text/javascript">
            var count = 0;
            function submitFunction(eventId){   
                if(count == 0){
                    count++;
                    document.getElementById("yourForm")._eventId.value = eventId;   
                    document.getElementById("yourForm").submit(); 
                }else{
                    document.getElementById("requestMsg").style.display = 'block';
                }
            }
        </script>
        <head>
        </head>
        <body>
        <form:form id="yourForm" commandName="yourForm" method="post">
            <table>
                <tr>
                    <td>
                        <div id="requestMsg">Request under process....</div>
                    </td>
                </tr>
                ....
                <tr>
                    <td>
                        <a href="javascript:submitFunction('submit');"><span>Submit</span></a>
                    </td>
                </tr>   
            </table>
        </form:form>
        </body>
    

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多