在SpringWebFlow中防止多次提交

在SpringWebFlow中防止多次提交,spring,spring-webflow-2,Spring,Spring Webflow 2,我们正在使用webflow,因为我们在提交之前需要填写多个表单。在用户提交所有数据库事务的最后一页上。所以我想让用户避免多次提交。webflow本身是否有办法处理这个问题。优雅地说,我的意思是它应该重定向或保持用户在同一页面上,这应该可以防止多次提交的任何操作。请注意,我们不能使用javascript。如果有一些内置机制来处理此模式,那就太好了。同时,我们在“action”类中使用synchronized块、a和一些流范围对象或属性来实现这一点。例如: Object mutex = WebUti

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

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

Object mutex = WebUtils.getSessionMutex(
        ((HttpServletRequest) context.getExternalContext().getNativeRequest()).getSession());

synchronized (mutex) {

    if (!model.isComplete()) {
        // complete transaction
        model.setComplete(true);
    }
 }

 // return correct transition

您可以使用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>

var计数=0;
函数submitFunction(eventId){
如果(计数=0){
计数++;
document.getElementById(“yourForm”)。\u eventId.value=eventId;
document.getElementById(“yourForm”).submit();
}否则{
document.getElementById(“requestMsg”).style.display='block';
}
}
正在处理中的请求。。。。
....

如何在webflow中获取模型?我从*-flow.xml调用的方法类似于updatexyy(RequestContext-RequestContext)。目前,我已经通过在需要防止提交的jsp上使用标记库在会话中创建令牌来防止多次提交。从会话中删除一个首次提交令牌并完成事务,对于其他后续提交令牌,在删除令牌时忽略。