JSF提交按钮-表单在一秒钟内被提交X次(直到重新创建视图)-如何防止它

JSF submit button - form is X times submited during one second (until view recreated) - how to prevent it?

本文关键字:提交 创建 新创建 视图 何防止 一秒钟 表单 JSF 按钮      更新时间:2023-09-26

我有一个问题,当我提交表单(按ENTER键或点击鼠标)-如果我按它x倍快,然后实际视图被重新创建(例如十次在一秒钟),表单数据发送十次和十次被保存到数据库。

无论是否有一些验证,例如检查数据只能保存一次。

下一次提交,视图刷新后,工作正常。数据没有保存,因为验证器正在工作。

所以,恶意用户填写表单,而不是正常提交,他快速点击提交按钮,直到视图被重建,我有X记录在数据库中,而不是一个:-)

我怎样才能防止这种奇怪的行为?

如何禁止按提交按钮,直到视图重建?

您可能想要添加一些像DoubleClickFilter到您的web.xml。另一种方法是使用Tokens,您验证每个请求并在第一个请求后失效,以便后续请求无法通过您的验证。

解决方案:

//Initialize our submit flag to false
var formSubmitted = false;
/**
 * Prevent from submitting a form more than once
 * @returns {Boolean}
 */
function submitForm()
{   
  //has the form been submitted before?
  if( formSubmitted == true )
  {
     alert("This form has already been submitted!");
     return false;
  }
  formSubmitted = true;
  return true; // Submit form
}

和提交按钮:

<h:commandButton ... action="#{bean.action}" onclick="return submitForm();"/>